Време за изчакване при използване на функция click() webdriver selenium 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
След като изберете опцията за филтър в изскачащия прозорец и щракнете върху бутона OK, изскачащият прозорец се затваря и главната страница зад него се показва отново. Последното щракване() се извършва, показвайки таблица с данни, която трябва да има, но дори след като таблицата е напълно генерирана, страницата остава така, сякаш все още зарежда нещо, но не е така. И следващата итерация не започва, защото зареждането продължава до изчакване.   -  person Hissashi Rocha    schedule 26.10.2017


Отговори (1)


Намерих решение на проблема.

Очевидно функцията click() блокира кода, докато страницата не бъде "напълно" заредена. По някаква причина обаче страницата продължава да се зарежда завинаги (без нищо друго за зареждане) и задържа кода ми, докато достигне ограничението за изчакване.

Вместо да използвам 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