使用Selenium Python实现网页的无限滚动。

huangapple go评论72阅读模式
英文:

Infinite scrolling of webpage using Selenium Python

问题

我想滚动直到所有元素都加载完毕。我的代码在前面7到8页运行良好,使用以下代码。

driver.get('https://www.bigbasket.com/ps/?q=rice')
last_height = driver.execute_script("return document.body.scrollHeight")

while True:
    # 向下滚动到底部
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    # 等待页面加载
    WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//div[@class="show-more"]/button')))
    driver.find_element_by_xpath('//div[@class="show-more"]/button').click()
    # 计算新的滚动高度并与上次滚动高度进行比较
    new_height = driver.execute_script("return document.body.scrollHeight")
    if new_height == last_height:
        break
    last_height = new_height

尽管不是所有元素都加载完毕,但最后的高度与新的高度相等。我需要滚动直到所有元素都加载完毕。

英文:

I want to scroll till all the element is loaded. My code works well for starting till 7 8 pages using this code.

driver.get('https://www.bigbasket.com/ps/?q=rice')
last_height = driver.execute_script("return document.body.scrollHeight")

while True:
    # Scroll down to bottom
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    # Wait to load page
    WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//div[@class="show-more"]/button')))
    driver.find_element_by_xpath('//div[@class="show-more"]/button').click()
    # Calculate new scroll height and compare with last scroll height
    new_height = driver.execute_script("return document.body.scrollHeight")
    if new_height == last_height:
        break
    last_height = new_height

The last height became equal to new height even though not all the element is loaded. I need to scroll till all element is loaded.

答案1

得分: 0

要[滚动](https://stackoverflow.com/a/54689339/7429447)到页面底部并不断点击<kbd>显示更多</kbd>按钮,您可以使用以下[_定位策略_](https://stackoverflow.com/questions/48054321/of-the-many-findelements-by-functions-in-selenium-when-would-you-use-one-over):

- 代码块:

	  driver.get("https://www.bigbasket.com/ps/?q=rice")
	  while True:
	  	try:
	  		driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
	  		print("浏览器滚动")
	  		driver.execute_script("arguments[0].click();", WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//button[text()='显示更多']"))))
	  		print("点击显示更多按钮")
	  		time.sleep(3)
	  	except WebDriverException:
	  		print("不再滚动")
			break

- 控制台输出:

	  浏览器滚动
	  点击显示更多按钮
	  浏览器滚动
	  点击显示更多按钮
	  浏览器滚动
	  点击显示更多按钮
	  ...
	  ...

请注意,上述内容中的链接将保持原样,不进行翻译。

英文:

To scroll down till the bottom of the page and keep on clicking the <kbd>Show More</kbd> button you can use the following locator strategy:

  • Code block:

    driver.get(&quot;https://www.bigbasket.com/ps/?q=rice&quot;)
    while True:
    	try:
    		driver.execute_script(&quot;window.scrollTo(0, document.body.scrollHeight);&quot;)
    		print(&quot;Browser scrolled&quot;)
    		driver.execute_script(&quot;arguments[0].click();&quot;, WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, &quot;//button[text()=&#39;Show More&#39;]&quot;))))
    		print(&quot;Show More button clicked&quot;)
    		time.sleep(3)
    	except WebDriverException:
    		print(&quot;No more scrolling&quot;)
      	break
    
  • Console Output:

    Browser scrolled
    Show More button clicked
    Browser scrolled
    Show More button clicked
    Browser scrolled
    Show More button clicked
    ...
    ...
    

huangapple
  • 本文由 发表于 2023年6月15日 00:32:25
  • 转载请务必保留本文链接:https://go.coder-hub.com/76475750.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定