【问题标题】:Selenium - Python Set timeout on finding elementsSelenium - Python 在查找元素时设置超时
【发布时间】:2018-09-01 05:59:35
【问题描述】:

我正在收集来自website 的链接。我遍历它拥有的页面,并在每个页面上检索链接:

links = driver.find_elements_by_xpath('//*[contains(@class, "m_rs_list_item_main")]/div[1]/div[1]/a')

现在...有时网站会出现故障并且没有显示应有的链接。例如,它通常说:

链接1

链接2

...

链接N

第 M 页

突然出现了一个页面,比如说 M+1,它根本没有显示任何链接。然后代码卡在上面的行(links = ...)“寻找”链接。我用计数器计算链接,以查看每个页面中有多少链接:

if numlinks_inrun == 0:
    print('nolinks')

现在,我从来没有打印过“nolinks”消息。当我在终端中按 CTRL+C 中止程序时,我会在终端中获得回溯:

links = driver.find_elements_by_xpath('//*[contains(@class, "m_rs_list_item_main")]/div[1]/div[1]/a')
  File "/home/vladimir/anaconda3/lib/python3.5/site-packages/selenium/webdriver/remote/webdriver.py", line 305, in find_elements_by_xpath
    return self.find_elements(by=By.XPATH, value=xpath)

这就是为什么我知道程序在这一点上卡住了。有谁知道如何设置超时,以便 selenium 不会永远搜索那些不存在的链接?

【问题讨论】:

  • @VladimirVargas 当我尝试访问website 时收到This request was blocked by the security rules 的消息。我们有其他选择吗?谢谢
  • 它看起来像一个特定页面或某个页面需要很长时间才能加载它。您可以设置页面加载超时。我不认为这是因为 find 元素默认是隐式等待的,如果它没有找到任何元素,它不会等到你设置隐式超时。

标签: python selenium


【解决方案1】:

这似乎是元素没有及时加载以便硒找到它的问题。您可能必须考虑添加一个显式等待,您可以使用它来设置 selenium 定位指定页面元素之前的秒数。这就是为什么您没有看到“nolinks”输出的原因,因为它出错了。

上下文: https://selenium-python.readthedocs.io/waits.html#explicit-waits

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-12
    • 2014-08-13
    • 1970-01-01
    相关资源
    最近更新 更多