【问题标题】:Python Selenium `move_by_offset` doesn't workPython Selenium `move_by_offset` 不起作用
【发布时间】:2018-09-20 21:13:23
【问题描述】:

使用 Python Selenium 调用简单的滚动操作不起作用

driver = webdriver.Chrome()
driver.get('https://www.wikipedia.org/')
time.sleep(2)
actions = ActionChains(driver)
actions.move_by_offset(500, 500).perform()

例如移动到元素的功能,工作 Ok and Do scroll:

driver = webdriver.Chrome()
driver.get('https://www.wikipedia.org/')
time.sleep(2)

element = driver.find_element_by_css_selector(<Something>)
actions = ActionChains(driver)
actions.move_to_element(element).perform()

调用移动到有偏移的元素,不起作用

driver = webdriver.Chrome()
driver.get('https://www.wikipedia.org/')
time.sleep(2)

element = driver.find_element_by_css_selector(<Something>)
actions = ActionChains(driver)
actions.move_to_element_with_offset(element, 500, 500).perform()

有什么原因吗?

【问题讨论】:

    标签: python selenium selenium-webdriver selenium-chromedriver


    【解决方案1】:

    move_by_offset 似乎无法滚动页面,但它仍然可以将鼠标移动到当前鼠标位置的偏移处。

    确认我们可以尝试这样做:

    driver = webdriver.Chrome()
    driver.get('https://www.wikipedia.org/')
    actions = ActionChains(driver)
    actions.move_by_offset(300, 500).context_click().perform()
    

    要通过偏移量滚动页面,我们必须使用 js:

    driver = webdriver.Chrome()
    driver.get('https://www.wikipedia.org/')
    driver.execute_script('window.scrollBy(0, 500)')  # x=0, y=500
    

    【讨论】:

    • Moving mouse,我觉得像网页上的用户指针,而不是通常的鼠标。我认为这里遗漏了一些东西,因为为什么我们需要这种方法?例如move_to_element(to_element)[source] 进行滚动,但从文档中你会发现Moving the mouse to the middle of an element.
    【解决方案2】:

    移动鼠标后尝试等待几秒钟。例如,以下在我的 CentOS7.3 主机中获取屏幕截图的代码对我有用。

    chrome_options = webdriver.ChromeOptions()
    chrome_options.add_argument('--headless')
    chrome_options.add_argument("--window-size=720,480")
    chrome_options.add_argument('--no-sandbox')
    driver = webdriver.Chrome('/usr/bin/chromedriver', chrome_options=chrome_options, service_args=['--verbose', '--log-path=/tmp/chromedriver.log'])
    
    driver.get(url)
    time.sleep(6)
    
    ActionChains(driver).move_by_offset(50, 50).perform()
    time.sleep(2)
    
    filename="/tmp/Screenshots/uuid.png"
    driver.save_screenshot(filename)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 2018-09-30
      • 2017-09-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多