2017-10-25 13 views
0

이것은 웹 프로젝트에서 처음으로 웹을 긁어 내고 웹 사이트에서 몇 가지 옵션을 선택한 후 동적으로 일부 CSV 파일을 생성하기 위해 Python과 함께 selenium webdriver를 사용하고 있습니다. 아직 없습니다).click() webdriver 셀레늄 기능을 사용하는 경우 시간 초과 파이썬

그러나 실행이 버튼 click()에 도달하면 예기치 않은 시간 초과가 발생합니다. 클릭이 수행되지만 시간이 지나면 실행이 계속되지 않습니다.

해결 방법에 대한 단서가 있습니까?

감사합니다.

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** 
+0

'filtro_uf.click()'이 페이지를로드합니까? –

+0

일종의 "팝업 창"을로드하지만 첫 페이지가 그 뒤에 남아 있습니다. –

+0

팝업 창에서 필터 옵션을 선택하고 "확인"버튼을 클릭하면 팝업이 닫히고 그 뒤에있는 기본 페이지가 다시 표시됩니다. 마지막 클릭()이 수행되어 데이터 테이블이 표시되지만 테이블이 완전히 생성 된 후에도 페이지는 계속로드되는 것처럼 보이지만 그렇지 않습니다. 로딩이 타임 아웃까지 계속되기 때문에 다음 반복은 시작되지 않습니다. –

답변

0

내가이 문제에 대한 해결 방법을 찾았습니다.

분명히 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')