Selenium - Python设置超时查找元素

时间:2017-06-02 13:52:37

标签: python selenium

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

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

现在......有时网站会失败并且不会显示它应该的链接。例如,通常会说:

  

LINK1

     

link2

     

...

     

链接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不会永远搜索那些未存在的链接?

1 个答案:

答案 0 :(得分:2)

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

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