gpt4 book ai didi

python - chromedriver 版本 >74 时出现 MoveTargetOutOfBoundsException 问题

转载 作者:行者123 更新时间:2023-12-01 00:08:00 28 4
gpt4 key购买 nike

我不知道为什么 ActionChains move_to_element() 无法与 chromedriver >74 配合使用。

(但它适用于 chromedriver 74 和 geckodriver。)

即使我在 ActionChains 之前添加了这三行,它仍然无法移动到元素。

WebDriverWait(driver, 60).until(EC.presence_of_element_located((By.XPATH, xxxxx)))
WebDriverWait(driver, 60).until(EC.visibility_of_element_located((By.XPATH, xxxxx))
drvier.execute_script("arguments[0].scrollIntoView();", element)

ActionChains(driver).move_to_element(element).click().perform()

并抛出如下错误:

selenium.common.exceptions.MoveTargetOutOfBoundsException: Message: move target out of bounds (Session info: chrome=79.0.3945.117)

我还尝试使用 Selenium MoveTargetOutOfBoundsException even after scrolling to element 中提到的 move_to_element_with_offset ,它仍然不起作用:

ActionChains(driver).move_to_element_with_offset(element, 5, 5).click().perform()

下面是我的 chromedriver 设置。设置对 ActionChains 有影响吗?

options = webdriver.ChromeOptions()
options.add_argument('--no-sandbox')
options.add_argument('log-level=3')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--no-proxy-server')
options.add_argument('--disable-extensions')
options.add_argument('--disable-infobars')
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
driver = webdriver.Chrome(executable_path=chromedriver_path, chrome_options=options)

最佳答案

因为您的用途是通过 ActionChains 调用 click(),而不是 presence_of_element_ located()visibility_of_element_ located() > 您需要将 expected_conditions 用作 element_to_be_clickable() ,如下所示:

  • 与 ActionChains 一起使用:

    ActionChains(driver).move_to_element(WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "element_css")))).click().perform()
  • 如果您必须在调用 click() 之前执行 scrollIntoView(),则需要为 visibility_of_element_ located 引发 WebDriverWait (),您可以使用以下 Locator Strategy :

    WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, xxxxx))
    drvier.execute_script("arguments[0].scrollIntoView();", WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, xxxxx)))
    ActionChains(driver).move_to_element(WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "element_css")))).click().perform()
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
<小时/>

其他注意事项

确保:

  • Selenium 已升级至当前级别 Version 3.141.59
  • ChromeDriver 已更新至当前的 ChromeDriver v79.0.3945.36 级别。
  • Chrome 已更新至当前 Chrome 版本 79.0 级别。 (根据ChromeDriver v79.0 release notes)
  • 通过 IDE清理您的项目工作区,并仅使用所需的依赖项重建项目。
  • 如果您的基本Web 客户端版本太旧,请通过 Revo Uninstaller 将其卸载并安装最新的 GA 和已发布版本的Web 客户端
  • 重新启动系统
  • 非root用户身份执行@Test
  • 始终在 tearDown(){} 方法中调用 driver.quit() 来关闭和销毁 WebDriverWeb Client 优雅地实例化。
<小时/>

更新

根据您的评论:

options.add_experimental_option('w3c', False)

为您工作,但根据 ChromeDriver 75.0.3770.8发行说明:

Resolved issue 2536: Make standards mode (goog:chromeOptions.w3c:true) the default [Pri-2]

ChromeDriver 75.0 解决了此问题。

所以底线是,chromeOptions.w3c 默认情况下需要设置为 true。在 chromedriver 中关闭 w3c 来解决该错误将违反最佳实践。我们在以下讨论中详细讨论了这一点:

关于python - chromedriver 版本 >74 时出现 MoveTargetOutOfBoundsException 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59819502/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com