我正在测试如何在搜索结果页面中获取所有结果,以学习如何使用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的新手,但确实是网络爬虫的新手,我很好奇,有人可以解释发生了什么事吗?
答案 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))