【发布时间】:2019-07-09 21:24:51
【问题描述】:
我正在测试如何在搜索结果页面中获取所有结果,以了解如何使用 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 的新手,对网络抓取确实很陌生,我只是好奇,谁能解释一下可能发生的情况?
【问题讨论】:
-
Facebook 不允许您抓取它们。使用 API。如果您在 API 中做不到,请不要这样做。
标签: python selenium web-scraping webdriverwait