嗨,大家好,我是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按钮,然后我将获得全文内容
同意@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)
我们可以通过使用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
使用带有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)
试试这样:
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))