我有一段代码,可以抓取无限高度的网站(Like FACEBOOK)
。
Python selenium脚本要求页面javascript转到页面底部,以便进一步加载页面。但最终碰巧循环以异步方式运行,网站的速率限制器阻止了脚本。
我需要页面等待页面首先加载然后继续,但我没有这样做。
以下是我迄今为止所尝试过的事情。
代码如下:
while int(number_of_news) != int(len(news)) :
driver.execute_script("window.scrollTo(document.body.scrollHeight/2, document.body.scrollHeight);")
news = driver.find_elements_by_class_name("news-text")
print(len(news))
输出类似于
当值为43, 63... and so on
时,我将其解释为多次执行循环。
我也试过让它递归,但结果仍然是一样的。递归代码如下:
def call_news(_driver, _news, _number_of_news):
_driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
_news = driver.find_elements_by_class_name("news-text")
print(len(_news))
if int(len(_news)) != int(number_of_news) :
call_news(_driver, _news, _number_of_news)
else :
return _news
赞赏任何提示。
答案 0 :(得分:3)
您可以设置page_load_timeout
以使驱动程序等待加载页面
driver.set_page_load_timeout(10)
另一个选择是等待要更改的元素数量
current_number_of_news = 0
news = []
while int(number_of_news) != int(len(news)) :
driver.execute_script("window.scrollTo(document.body.scrollHeight/2, document.body.scrollHeight);")
while (current_number_of_news == len(news)) :
news = driver.find_elements_by_class_name("news-text")
current_number_of_news = len(news)
print(len(news))