硒等待能见度_of_all_elements_located超时

时间:2019-02-15 17:31:05

标签: python selenium web-scraping webdriverwait

我正在测试如何在搜索结果页面中获取所有结果,以学习如何使用Selenium。登录该网站后,我可以在普通的浏览器中看到该特定页面的完整资源,包括完成页面的一行的div。

当然,如果结果集较长,则正常的浏览器将无法显示,因为Javascript的加载很懒,所以我想找到一种方法让Selenium等待所有结果加载完毕。

我在下面基于https://selenium-python.readthedocs.io/waits.html

上的等待代码

此特定页面的以下引发超时错误:

try:
    element = WebDriverWait(driver,100).until(EC.visibility_of_all_elements_located((By.CLASS_NAME, "_3t0c")))

finally:
    print('done with webdriver wait anyway')

抛出的错误是:

in <module>
    element = WebDriverWait(driver, 100).until(EC.visibility_of_all_elements_located((By.CLASS_NAME, "_3t0c")))
  File "..longFilePath....\lib\site-packages\selenium\webdriver\support\wait.py", line 80, in until
    raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message:

Message:之后没有显示任何内容

编辑: 由于@QHarr谢谢下方指出缺少括号,因此以下错误有所不同:

in <module>
    element = WebDriverWait(driver,30).until(EC.visibility_of_all_elements_located(By.CLASS_NAME, "_3t0c"))
TypeError: __init__() takes 2 positional arguments but 3 were given

注意,如果我注释掉该try循环,我仍然可以在此页面上获得所有结果。

否则,我尝试让Selenium等待结果div类的结束,并且在timeout = 100时发生超时错误,我可以看到在Selenium中页面加载可能不到20秒。

但是我只是尝试使用不同的class =“ _ 32mo”,它在列表中每个名称似乎也有一个,而且显然不会超时。

我是Selenium的新手,但确实是网络爬虫的新手,我很好奇,有人可以解释发生了什么事吗?

2 个答案:

答案 0 :(得分:1)

对于显示的错误,该方法需要一个元组,因此您需要更多的括号。试试

WebDriverWait(driver,30).until(EC.visibility_of_all_elements_located((By.CLASS_NAME, "_3t0c")))

答案 1 :(得分:0)

类型错误:接受 2 个位置参数,但给出了 3 个

将定位器的类型和值赋给变量 例如: a =(By.CLASS_NAME, "_3t0c")

然后将此变量传递到括号中 例如:

a = (By.CLASS_NAME, "_3t0c")
wait = WebDriverWait(driver,30)
element = wait.until(EC.visibility_of_all_elements_located(a))