【问题标题】:Scrolling to top of the page in Python using Selenium使用 Selenium 在 Python 中滚动到页面顶部
【发布时间】:2018-01-16 12:48:14
【问题描述】:

我在使用 Python 和 Selenium 时滚动到网页顶部时遇到问题。

当页面由于某种原因加载时,您会被带到页面底部(这将被修复)。但是,当我尝试滚动到顶部时,它不起作用。

我尝试了以下方法:

self.driver.execute_script("scroll(0, -250);")

self.driver.execute_script("scroll(0, 0);")

我也尝试过定位元素然后滚动到它:

self.driver.execute_script("arguments[0].scrollIntoView()", element)

上面的 scrollIntoView() 代码在向下滚动到元素时起作用。但是,它不能向上滚动。

我已经尝试过这个正在运行的 Chrome 驱动程序和 PhantomJs。

有什么建议吗?

【问题讨论】:

  • 您是否尝试过将window.scrollTo(0, 0); 放入您的execute_script 中?
  • @mangoHero1 我试过self.driver.window.scroll("window.scroll(0, 0);"),脚本显示以下错误:self.driver.window.scroll("window.scroll(0, 0);") AttributeError: “WebDriver”对象没有属性“窗口”
  • @mangoHero1 抱歉,我看到错字已更正并做了以下操作:self.driver.execute_script("window.scroll(0, 0);") 仍然没有向上滚动。
  • 正如 mangoHero 指出的那样——你不知何故错过了——它不是“滚动”,而是“滚动到”。
  • @jlaur 是的,对不起,这是在深夜完成的,我输入了上面的代码。我实际尝试过但没有用的方法如下:self.driver.execute_script("window.scrollTo(0, 0);")

标签: javascript python selenium selenium-webdriver webdriver


【解决方案1】:

您可以简单地使用 CTRL + HOME 键。它将滚动到页面顶部。

driver.find_element_by_tag_name('body').send_keys(Keys.CONTROL + Keys.HOME)

【讨论】:

  • 可能需要先from selenium.webdriver.common.keys import Keys
  • @ErichBSchulz,是的,没错。 Keys 需要导入。
  • 似乎不起作用
【解决方案2】:

可以考虑先定位HTML DOM中的元素,然后我们可以将scroll元素定位到Viewport中,如下:

element = driver.find_element_by_xpath("element_xpath")
self.driver.execute_script("return arguments[0].scrollIntoView(true);", element)

【讨论】:

  • 这里唯一可靠的答案....
【解决方案3】:
from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("__")

#to scroll try use the following command
driver.execute_script("scrollBy(0,250);")

它会起作用的!

【讨论】:

  • 请在您的回答中添加更多详细信息
【解决方案4】:

请试试这个:

driver.execute_script("document.querySelector('div[role=dialog] ul').parentNode.scrollTop=1e100")

【讨论】:

    【解决方案5】:

    从硒导入网络驱动程序

    t=10
    while t:
    
    #if you want to scroll to the end of the page,use this
    
    driver.execute_script("window.scrollTo(0,document.body.scrollHeight);")
        sleep(3)
    
    
    #if you want to scroll down upto some level use this, here i used "1000" you may vary 
    #it according to your use
    
    driver.execute_script("scrollBy(0,+1000);")
        sleep(3)
    
    
    #if you want to scroll some level up, use this,again i used here "-500" you may vary 
    #according to your use 
    
    driver.execute_script("scrollBy(0,-500);")
    sleep(3)
    t=t-1       # it`s a part of the loop
    

    这肯定会对你有所帮助:)

    【讨论】:

      【解决方案6】:

      向上或向下滚动有 4 种方式

      1)按像素滚动

      driver.execute_script("window.scrollBy(0,0)","")
      

      2)向下滚动直到找不到元素

      element=driver.find_element(By.XPATH,"xpath of element")
      driver.execute_script("arguments[0].scrollIntoView();",element)
      

      3)滚动到页尾

      driver.execute_script("window.scrollBy(0,document.body.scrollHeight)")
      
      1. 使用动作链

        elementpos=driver.find_element(By.XPATH,"xpath of element")
        动作=动作链(驱动程序) actions.move_to_element(elementpos).perform()

      【讨论】:

        【解决方案7】:

        您可以使用 document.body.scrollTop:一个 javascript 变量,其中包含页面在此之前向下滚动的值。 像这样 : driver.execute_script("scrollBy(0,-document.body.scrollTop)")

        【讨论】:

          猜你喜欢
          • 2010-11-11
          • 1970-01-01
          • 1970-01-01
          • 2021-07-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多