如何逐步在 Python Selenium 中向下滚动 [英] How to scroll down in Python Selenium step by step
问题描述
大家好,我是 Selenium 和 Python 的新手.我只是在抓取网站 pagalguy 网站.我知道如何向下滚动到页面底部,但我需要的是逐步向下滚动,以便 Selenium 将单击所有阅读按钮,但我不知道如何像这样一步一步向下滚动我硬编码如下
browser.execute_script("window.scrollTo(0,300);")browser.find_element_by_link_text("阅读更多...").click()browser.execute_script("window.scrollTo(300,600);")browser.find_element_by_link_text("阅读更多...").click()browser.execute_script("window.scrollTo(600,900);")browser.find_element_by_link_text("阅读更多...").click()browser.execute_script("window.scrollTo(900,1200);")browser.find_element_by_link_text("阅读更多...").click()browser.execute_script("window.scrollTo(1200,1500);")browser.find_element_by_link_text("阅读更多...").click()browser.execute_script("window.scrollTo(1500,1800);")browser.find_element_by_link_text("阅读更多...").click()browser.execute_script("window.scrollTo(1800,2100);")browser.find_element_by_link_text("阅读更多...").click()browser.execute_script("window.scrollTo(2100,2500);")browser.find_element_by_link_text("阅读更多...").click()它继续......
我尝试使用 while 循环使其自动化,但结果出错,上面的方法有效,但我希望它简短且循环,以便我可以将它用于具有不同页面长度的所有其他页面.
initial_value = 0下一个值 = 300而 next_value<300000:browser.execute_script("window.scrollTo(initial_value,next_value);")browser.find_element_by_link_text("阅读更多...").click()初始值=下一个值next_value+=300
<块引用>
JavascriptException:消息:ReferenceError:initial_value 不是定义
但是我已经定义了值,我想我已经解释了我真正想要做什么,我想自动向下滚动并点击所有阅读按钮然后我会得到全文内容
同意@Rahul Chawla 的回答.
但添加一项更改.你可以试试这个
driver = webdriver.Chrome()read_mores = driver.find_elements_by_xpath('//a[text()="阅读更多..."]')对于 read_mores 中的 read_more:driver.execute_script("arguments[0].scrollIntoView();", read_more)driver.execute_script("$(arguments[0]).click();", read_more)
Hi guys I am new to Selenium and Python. I was just scraping the site pagalguy website. I know how to scroll down to the bottom of the page but what I need is to scroll down step by step so that the Selenium will click all the readmore buttons,but I don't know how to scroll down step by step like that so I hard coded it like following one
browser.execute_script("window.scrollTo(0,300);")
browser.find_element_by_link_text("Read More...").click()
browser.execute_script("window.scrollTo(300,600);")
browser.find_element_by_link_text("Read More...").click()
browser.execute_script("window.scrollTo(600,900);")
browser.find_element_by_link_text("Read More...").click()
browser.execute_script("window.scrollTo(900,1200);")
browser.find_element_by_link_text("Read More...").click()
browser.execute_script("window.scrollTo(1200,1500);")
browser.find_element_by_link_text("Read More...").click()
browser.execute_script("window.scrollTo(1500,1800);")
browser.find_element_by_link_text("Read More...").click()
browser.execute_script("window.scrollTo(1800,2100);")
browser.find_element_by_link_text("Read More...").click()
browser.execute_script("window.scrollTo(2100,2500);")
browser.find_element_by_link_text("Read More...").click()
it goes on .......
I tried automating it using a while loop but it resulted in error, the above one works but I want it short and looped so that I can use it for all the other pages with different page length.
initial_value = 0
next_value = 300
while next_value<300000:
browser.execute_script("window.scrollTo(initial_value,next_value);")
browser.find_element_by_link_text("Read More...").click()
initial_value=next_value
next_value+=300
JavascriptException: Message: ReferenceError: initial_value is not defined
But I have defined the value, I think I explained what I am actually trying to do, I want to automatically scroll down and click all the readmore buttons and then I will get the full text content
Agree with answer of @Rahul Chawla.
But adding one change. You can try this one
driver = webdriver.Chrome()
read_mores = driver.find_elements_by_xpath('//a[text()="Read More..."]')
for read_more in read_mores:
driver.execute_script("arguments[0].scrollIntoView();", read_more)
driver.execute_script("$(arguments[0]).click();", read_more)
这篇关于如何逐步在 Python Selenium 中向下滚动的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!