如何逐步向下滚动Python Selenium

How to scroll down in Python Selenium step by step

嗨,伙计们,我是硒和Python的新手。我只是在搜索Pagaguy网站。我知道如何向下滚动到页面的底部,但是我需要一步一步地向下滚动,这样Selenium就可以单击所有的readmore按钮,但是我不知道如何像这样一步一步地向下滚动,所以我硬编码它,就像下面的一样

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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循环使其自动化,但它导致了错误,上面的循环可以工作,但我希望它简短且循环,这样我就可以将它用于所有其他具有不同页面长度的页面。

1
2
3
4
5
6
7
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

但是我已经定义了这个值,我想我已经解释了我实际要做的事情,我想自动向下滚动并单击所有的readmore按钮,然后我会得到完整的文本内容。


在javascript窗口中使用loop.scrollby(0,y)方法,坐标选择移动步骤和迭代次数。

1
2
3
4
5
   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)

同意@rahul chawla的回答。

但是增加了一个变化。你可以试试这个

1
2
3
4
5
6
7
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)


我们可以通过使用find_elements_by_xpath()查找所有的read more按钮,并在将它们逐个滚动到视图中的同时循环这些按钮来实现这一点。

1
2
3
4
5
6
7
8
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


尝试这样:

1
2
3
4
5
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);")

对于这一个:

1
driver.execute_script("window.scrollTo({},{});".format(initial_value, next_value))