Решение TimeoutException с помощью Python (Selenium)Python

Программы на Python
Anonymous
Решение TimeoutException с помощью Python (Selenium)

Сообщение Anonymous »

Для небольшого проекта мне нужно извлечь объявления о неплатежеспособности со следующего веб-сайта: https://neu.insolvenzbekanntmachungen.de/ap/suche.jsf
Что мне нужно после ввода сегодняшней даты и выбора «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)
Я относительно новичок в Selnium, но думаю, что сам код работает хорошо и делает то, что должен. Однако в части между двумя операторами печати (print(here), print(here2)) элемент не может быть локализован, и я получаю исключение TimeoutException. Кажется, это происходит очень случайно, так как иногда это работает, а иногда нет. У меня также уже был опыт, когда мне удалось полностью извлечь текст за всеми значками масштабирования.
Может быть, идентификаторы не уникальны? Я уже читал похожие сообщения, и большую часть времени там предлагалось использовать XPATH, который я уже реализовал. Я уже пробовал driver.switch_to.default_content() после оператора print(here), который был предложен в соответствующем сообщении, но проблема осталась та же.
Буду очень благодарен за любую помощь, как я могу это сделать он стабилен, так как скрипт должен выполняться каждый день.

Подробнее здесь: https://stackoverflow.com/questions/788 ... n-selenium

Вернуться в «Python»