У меня есть код Python, использующий драйвер Selenium Chrome, чтобы щелкнуть несколько тегов в списке.
Каждый открывает новое окно, где файл загружается мгновенно, и это все хорошо; однако некоторые из этих новых окон будут иметь два файла для загрузки, поэтому файл не будет загружен до тех пор, пока не будет нажата следующая метка.
Проблема, с которой я столкнулся, заключается в том, что я не могу дать Selenium знать, как «проверить», должно ли оно просто закрывать окно, поскольку загрузка была автоматической, или нужно сделать еще один щелчок, чтобы начать загрузку.
Я попытался выполнить find_elements_by_ (все возможные методы), чтобы драйвер проверил, есть ли ссылки для скачивания, но если загрузка автоматическая, драйвер просто продолжает работать. Это не превращает ошибку или что-то, но это просто работает постоянно. Если я закрою реальное окно загрузки, то оно покажет результат.
from selenium import webdriver
browser = webdriver.Chrome('chromedriver.exe', options=options)
#options are set for Chrome to download a PDF file without viewing it first.
main_window = browser.window_handles[0]
#this is the initial click to open the download window
browser.find_elements_by_css_selector('selector path').click()
#this is to have the driver activate the new window
pops = browser.window_handles[1]
browser.switch_to.window(pops)
#attempt to find the <a> tag with the download item
if browser.find_elements_by_css_selector('selector path') != []:
time.sleep(1)
browser.find_elements_by_css_selector('selector path').click()
browser.close()
browser.switch_to.window(main_window)
#this works fine when there are tags in the window. No problems
else:
time.sleep(1)
browser.close()
browser.switch_to.window(main_window)
#code can't get to the "else" because the driver gets stuck checking for the selector perpetually.
Я ожидаю, что Selenium проверит, имеет ли окно содержимое, если нет, задержит на секунду и закроет окно. Если есть контент, нажмите на ссылку для загрузки; однако, драйвер просто постоянно ищет селектор.
РЕДАКТИРОВАТЬ: забыл упомянуть, что окно, которое запускает загрузку автоматически, не имеет никакого содержимого, кроме HTML, сценариев и заголовков.
Даже когда я пытаюсь запустить find_element_by_tag, Selenium фактически не находит контент.