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) |
我们可以通过使用
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)) |