【问题标题】:Timeout when using click() webdriver selenium function Python使用 click() webdriver selenium 函数 Python 时超时
【发布时间】:2017-10-25 18:17:08
【问题描述】:

这是我的第一个网络抓取项目,我正在使用 selenium webdriver 和 Python,以便在网站上选择一些选项后动态生成一些 csv 文件(虽然我还没有)。

但是,当执行到达按钮 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**

【问题讨论】:

  • filtro_uf.click() 是否加载任何页面?
  • 它加载了一种“弹出窗口”,但第一页仍然在它后面。
  • 在弹出窗口中选择过滤选项并单击“确定”按钮后,弹出窗口关闭并再次显示其后面的主页。执行最后一次 click(),显示它应该显示的数据表,但即使在表完全生成后,页面仍然好像仍在加载某些内容,但事实并非如此。并且下一次迭代没有开始,因为加载一直持续到超时。

标签: python selenium web-scraping webdriver click


【解决方案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') 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-25
    • 2014-03-03
    • 1970-01-01
    • 2010-11-26
    • 2012-11-30
    • 2016-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多