在 Python 中使用 Selenium 停止动态页面中的滚动
Stop the Scroll in Dynamic Page with Selenium in Python
大家好,我正在尝试使用 selenium 和 scrapy 从 https://answers.yahoo.com/dir/index/discover?sid=396545663
中抓取一些信息
我尝试了不同的方法,我使用 Selenium 并将 PhantomJs 设置为驱动程序。
对于向下滚动页面,它是一个无限滚动页面,我使用这个指令:
elem.send_keys(Keys.PAGE_DOWN)
用于模拟按下 Page Down 按钮,而不是 JavaScript 函数:
browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")
因为这个 "seems" 在页面中加载较少的元素。
主要问题 是我如何知道我何时到达页面底部?是 "Infinite Scroll" 页面,所以我不知道它什么时候结束我需要向下滚动,但我在底部没有任何要分析的元素。
其实我用的是临时循环,但看起来真的很蠢
谢谢
例如,您可以创建一些并行线程 将检查页面是否有 ajax 请求。如果请求之间的时间经常超过 10 秒——你在页面的末尾。没有别的想法。
我实际上会寻找 "Loading..." 指标。 Wait for it 在每个滚动条上都可见,但如果你会得到一个 TimeoutException
- 这次没有加载指示器,也没有更多的项目要加载。
实施示例:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
wait = WebDriverWait(driver, 10)
while True:
# do the scrolling
browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")
try:
wait.until(EC.visibility_of_element_located((By.XPATH, "//*[. = 'Loading...']")))
except TimeoutException:
break # not more posts were loaded - exit the loop
未测试。
大家好,我正在尝试使用 selenium 和 scrapy 从 https://answers.yahoo.com/dir/index/discover?sid=396545663
中抓取一些信息我尝试了不同的方法,我使用 Selenium 并将 PhantomJs 设置为驱动程序。 对于向下滚动页面,它是一个无限滚动页面,我使用这个指令:
elem.send_keys(Keys.PAGE_DOWN)
用于模拟按下 Page Down 按钮,而不是 JavaScript 函数:
browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")
因为这个 "seems" 在页面中加载较少的元素。
主要问题 是我如何知道我何时到达页面底部?是 "Infinite Scroll" 页面,所以我不知道它什么时候结束我需要向下滚动,但我在底部没有任何要分析的元素。
其实我用的是临时循环,但看起来真的很蠢
谢谢
例如,您可以创建一些并行线程 将检查页面是否有 ajax 请求。如果请求之间的时间经常超过 10 秒——你在页面的末尾。没有别的想法。
我实际上会寻找 "Loading..." 指标。 Wait for it 在每个滚动条上都可见,但如果你会得到一个 TimeoutException
- 这次没有加载指示器,也没有更多的项目要加载。
实施示例:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
wait = WebDriverWait(driver, 10)
while True:
# do the scrolling
browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")
try:
wait.until(EC.visibility_of_element_located((By.XPATH, "//*[. = 'Loading...']")))
except TimeoutException:
break # not more posts were loaded - exit the loop
未测试。