Тайм-аут при использовании функции selenium веб-драйвера click() Python

Это мой первый проект по очистке веб-страниц, и я использую selenium webdriver с Python, чтобы динамически генерировать некоторые файлы csv после выбора нескольких параметров на веб-сайте (хотя я еще не там).

Однако я столкнулся с неожиданным тайм-аутом, когда выполнение достигает нажатия кнопки(). Клик выполняется, но он застревает там и не продолжает выполнение до тайм-аута.

Любые подсказки о том, как это решить?

Спасибо!!

from selenium import webdriver
from selenium.webdriver.support.ui import Select
import time


driver = webdriver.Firefox()
driver.get('http://www8.receita.fazenda.gov.br/SimplesNacional/Aplicacoes/ATBHE/estatisticasSinac.app/Default.aspx')
driver.find_element_by_id('ctl00_ctl00_Conteudo_AntesTabela_lnkOptantesPorCNAE').click()
Select(driver.find_element_by_id("ctl00_ctl00_Conteudo_AntesTabela_ddlColuna")).select_by_visible_text("Município")
filtro_uf =     driver.find_element_by_id('ctl00_ctl00_Conteudo_AntesTabela_btnFiltros')

for i in range (1, 28):
    filtro_uf.click()
    uf = Select(driver.find_element_by_id("ctl00_ctl00_Conteudo_AposTabela_ddlUf"))
    uf.options[i].click()
    time.sleep(2)
    driver.find_element_by_id('chkTodosMunicipios').click()
    time.sleep(2)
    driver.find_element_by_xpath("//*[contains(text(),'Ok')]").click()
    time.sleep(2)

# Here is where my code get stuck and gets a timeout
    driver.find_element_by_id('ctl00_ctl00_Conteudo_AntesTabela_btnExibir').click()

Ошибка, которую я получаю:

Traceback (most recent call last):      
File "/home/hissashi/Desktop/Python3/WS_SINAC/download_SINAC.py", line 22, in <module>   driver.find_element_by_id('ctl00_ctl00_Conteudo_AntesTabela_btnExibir').click()   
  File "/home/hissashi/.local/lib/python3.5/site-packages/selenium/webdriver/remote/webelement.py", line 80, in click
    self._execute(Command.CLICK_ELEMENT)    
  File "/home/hissashi/.local/lib/python3.5/site-packages/selenium/webdriver/remote/webelement.py", line 501, in _execute
    return self._parent.execute(command, params)   
  File "/home/hissashi/.local/lib/python3.5/site-packages/selenium/webdriver/remote/webdriver.py", line 308, in execute
    self.error_handler.check_response(response)   
  File "/home/hissashi/.local/lib/python3.5/site-packages/selenium/webdriver/remote/errorhandler.py", line 194, in check_response   
raise exception_class(message, screen, stacktrace)
**selenium.common.exceptions.TimeoutException: Message: Timeout loading page after 300000ms**

person Hissashi Rocha    schedule 25.10.2017    source источник
comment
filtro_uf.click() загружает какую-либо страницу?   -  person Gaurang Shah    schedule 26.10.2017
comment
Он загружает своего рода всплывающее окно, но первая страница остается за ним.   -  person Hissashi Rocha    schedule 26.10.2017
comment
После выбора параметра фильтра во всплывающем окне и нажатия кнопки «ОК» всплывающее окно закрывается, а главная страница за ним снова отображается. Выполняется последний щелчок(), показывая таблицу данных, которую он должен отображать, но даже после того, как таблица полностью сгенерирована, страница остается так, как будто она все еще что-то загружает, но это не так. И следующая итерация не начинается, потому что загрузка продолжается до истечения времени ожидания.   -  person Hissashi Rocha    schedule 26.10.2017


Ответы (1)


Я нашел обходной путь для проблемы.

По-видимому, функция click() блокирует код до тех пор, пока страница не будет «полностью» загружена. Однако по какой-то причине страница продолжает загружаться вечно (больше ничего не загружается) и удерживает мой код до тех пор, пока не будет достигнут предел времени ожидания.

Вместо того, чтобы использовать щелчок, я изменил его на клавишу ENTER, и страница по-прежнему загружается вечно, но код больше не хранится.

#FROM CLICK
driver.find_element_by_id('ctl00_ctl00_Conteudo_AntesTabela_btnExibir').click()

#TO SENDING ENTER (ue007)
driver.find_element_by_id('ctl00_ctl00_Conteudo_AntesTabela_btnExibir').send_keys(u'\ue007') 
person Hissashi Rocha    schedule 26.10.2017