【发布时间】:2020-04-06 10:07:32
【问题描述】:
我有一个可以“无限”向下滚动的页面(为了说明,我将使用页面https://www.reuters.com/news/us,每次滚动到页面底部时都会显示更多旧新闻)。我想向下滚动到页面底部以使用 selenium 多次加载旧项目。以下代码原则上有效:
driver = webdriver.Chrome(executable_path=r"/Users/bernhardclemm/Desktop/chromedriver")
driver.get('https://www.reuters.com/news/us')
# Accept Cookies
wait = WebDriverWait(driver, 5)
cookies = wait.until(EC.element_to_be_clickable((By.XPATH, "//button[@id='_evidon-banner-acceptbutton']")))
cookies.click()
# Switch of "Photos" to speed up loading
wait = WebDriverWait(driver, 5)
photos_off = wait.until(EC.element_to_be_clickable((By.XPATH, "//label[contains(text(),'Photos')]")))
photos_off.click()
# Scroll down 100 times
i = 1
while i < 500:
print(i)
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
i += 1
time.sleep(1)
正如您在下面的 GIF 中看到的那样,对于循环中的每一轮(i 打印在右侧的 Python 控制台中),Selenium 驱动程序向下滚动一次(左侧的 Google Chrome)。
但是,有时 Selenium 驱动程序已到达页面底部但没有加载新内容,如 GIF 所示。注意循环是如何在 Python 中运行的:
当我在 Chrome 中手动向上滚动一点时,自动滚动再次开始。因此,这不是,因为该网站已到达其内容的末尾。
知道这是由于网站还是我的代码中的缺陷造成的吗?如果是关于网站的问题,有什么方法可以避免 Selenium 的问题?
【问题讨论】:
-
你找到答案了吗?我也面临同样的问题。
-
我还没有进一步研究...