Что мне нужно после ввода сегодняшней даты и выбора «Eröffnungen» из раскрывающегося меню «Gegenstand der Veröffentlichung» и нажав «Поиск» внизу, вы увидите текст, который впоследствии будет скрыт за значком масштабирования на странице.
Код Python, который я использую реализовать это можно следующим образом:
Код: Выделить всё
import...
driver = webdriver.Safari()
driver.maximize_window()
driver.get("https://neu.insolvenzbekanntmachungen.de/ap/suche.jsf")
date_input = WebDriverWait(driver, 10).until(
ec.visibility_of_element_located((By.ID, "frm_suche:ldi_datumVon:datumHtml5"))
)
curr_date = datetime.today().strftime("%Y-%m-%d")
arg_value = f"arguments[0].value = '{curr_date}';"
driver.execute_script("arguments[0].value = '';", date_input)
driver.execute_script(arg_value, date_input)
# Select the "Eröffnungen" option from the dropdown menu
select_element = WebDriverWait(driver, 20).until(
ec.visibility_of_element_located((By.ID, "frm_suche:lsom_gegenstand:lsom"))
)
driver.execute_script("arguments[0].scrollIntoView(true);", select_element)
time.sleep(1)
select = Select(select_element)
select.select_by_value("2")
# Execute the search
driver.execute_script("arguments[0].dispatchEvent(new Event('change'));", date_input)
date_input.send_keys(Keys.RETURN)
results_table = WebDriverWait(driver, 20).until(
ec.visibility_of_element_located((By.ID, "tbl_ergebnis"))
)
rows = results_table.find_elements(By.TAG_NAME, "tr")
data = []
# Iterate over each row of the table
for i, row in enumerate(rows):
cells = row.find_elements(By.TAG_NAME, "td")
if len(cells) > 0:
# Click the zoom icon to open the new window
zoom_icon = cells[6].find_element(By.TAG_NAME, "input[type='image']")
WebDriverWait(driver, 20).until(
ec.element_to_be_clickable((By.TAG_NAME, "input[type='image']"))
)
driver.execute_script("arguments[0].scrollIntoView(true);", zoom_icon)
time.sleep(1) # Wait for scroll
driver.execute_script("arguments[0].click();", zoom_icon)
# Wait for the new window to open
WebDriverWait(driver, 20).until(ec.new_window_is_opened)
driver.switch_to.window(driver.window_handles[1])
# Extract the publication text
print("here")
WebDriverWait(driver, 20).until(
ec.presence_of_element_located((By.XPATH,
"//form[@id='form']//pre[@id='veroefftext']"))
)
print("here2")
pub_text = driver.find_element(By.XPATH, "//form[@id='form']//pre[@id='veroefftext']").text
# Close the new window and switch to the first window again
driver.close()
driver.switch_to.window(driver.window_handles[0])
# Store the extracted data
data.append({
'veroeffentlichungsdatum': cells[0].text,
'aktenzeichen': cells[1].text,
'gericht': cells[2].text,
'name_vorname_bezeichnung': cells[3].text,
'sitz_wohnsitz': cells[4].text,
'register': cells[5].text,
'veroeffentlichungstext': pub_text
})
df = pd.DataFrame(data)
df.columns = ['veroeffentlichungsdatum', 'aktuelles_aktenzeichen', 'gericht',
'name_vorname_bezeichnung', 'sitz_wohnsitz', 'register', 'veroeffentlichungstext']
df.to_excel("data/insos.xlsx", index=False)
Может быть, идентификаторы не уникальны? Я уже читал похожие сообщения, и большую часть времени там предлагалось использовать XPATH, который я уже реализовал. Я уже пробовал driver.switch_to.default_content() после оператора print(here), который был предложен в соответствующем сообщении, но проблема осталась та же.
Буду очень благодарен за любую помощь, как я могу это сделать он стабилен, так как скрипт должен выполняться каждый день.
Подробнее здесь: https://stackoverflow.com/questions/788 ... n-selenium