Есть ли способ заставить Selenium в Python проверять окно загрузки контента? - PullRequest
0 голосов
/ 24 мая 2019

У меня есть код 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 фактически не находит контент.

...