如何逐步向下滚动Python Selenium

时间:2017-12-28 10:49:15

标签: python python-3.x selenium web-scraping web-crawler

大家好,我是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按钮然后我将获得全文内容

4 个答案:

答案 0 :(得分:0)

我们可以通过使用word11 word12 word13 word14 word21 word22 word23 word24 word31 word32 word33 word34 word41 word42 word43 word44 查找所有读取更多按钮并在逐个滚动视图的同时循环它们来实现此目的。

find_elements_by_xpath()

答案 1 :(得分: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)

答案 2 :(得分: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)

答案 3 :(得分:-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))