如何逐步向下滚动Python Selenium

问题描述 投票:2回答:4

嗨,大家好,我是Selenium和Python的新手。我只是在刮网站 pagalguy website。我知道如何向下滚动到页面底部,但我需要的是逐步向下滚动,以便Selenium将点击所有readmore按钮,但我不知道如何逐步向下滚动我硬编码就像跟着一个

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 .......

我尝试使用while循环自动化它,但它导致错误,上面的一个工作,但我希望它简短和循环,以便我可以使用它用于具有不同页面长度的所有其他页面。

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:消息:ReferenceError:未定义initial_value

但是我已经定义了这个值,我想我解释了我实际上要做的事情,我想自动向下滚动并点击所有的readmore按钮,然后我将获得全文内容

python python-3.x selenium web-scraping web-crawler
4个回答
0
投票

同意@Rahul Chawla的回答。

但添加一个变化。你可以尝试这个

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)

0
投票

我们可以通过使用find_elements_by_xpath()找到所有读取更多按钮并循环遍历它们,同时逐个滚动它们来查看。

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)
    read_more.click()
    # your code here

0
投票

使用带有javascript window.scrollBy(0,Y)方法的循环,坐标选择移动步骤和迭代次数。

   for i in range(20): # adjust integer value for need
       # you can change right side number for scroll convenience or destination 
       driver.execute_script("window.scrollBy(0, 250)")
       # you can change time integer to float or remove
       time.sleep(1)

-1
投票

试试这样:

while next_value<300000:
    driver.execute_script("window.scrollTo({},{});".format(initial_value, next_value))
    browser.find_element_by_link_text("Read More...").click()
    initial_value=next_value
    next_value+=300

基本上我只是更改了这一行:browser.execute_script(“window.scrollTo(initial_value,next_value);”)

对于这一个:

driver.execute_script("window.scrollTo({},{});".format(initial_value, next_value))
© www.soinside.com 2019 - 2024. All rights reserved.