【问题标题】:Selenium moving to absolute positions硒移动到绝对位置
【发布时间】:2015-04-07 10:05:34
【问题描述】:

我正在使用 python 包以某种指定的模式或只是随机运动来移动鼠标。

我尝试的第一件事是获取//html 元素的大小并使用它来设置鼠标移动的边界。但是,当我这样做时,MoveTargetOutOfBoundsException 会抬起头并显示一些“给定”坐标(这些坐标不在输入附近。

我使用的代码: origin = driver.find_element_by_xpath('//html') bounds = origin.size print bounds ActionChains(driver).move_to_element(origin).move_by_offset(bounds['width'] - 10, bounds['height'] - 10).perform()

所以我从每个边界中减去 10 来测试它并移动到那个位置(显然move_to_element_by_offset 方法是狡猾的)。

MoveTargetOutOfBoundsException: Message: Given coordinates (1919, 2766) are outside the document. Error: MoveTargetOutOfBoundsError: The target scroll location (17, 1798) is not on the page. Stacktrace: at FirefoxDriver.prototype.mouseMoveTo (file://...

实际给定的坐标是 (1903-10=1893, 969-10=989)。

有什么想法吗?

【问题讨论】:

  • 尝试在 origin 中使用 body 而不是 html
  • 试过了,没用。 (结果相同)

标签: python html selenium


【解决方案1】:

两个可能的问题:

1) 页面上可以滚动,所以在点击之前你应该滚动到元素视图

2) 大小是在不考虑浏览器元素的情况下给出的,在现实世界中,您应该替换大约 20 或 30 以获得原始大小(您可以测试测试该值)

【讨论】:

  • 好的。两个问题:使用move_to_element时页面不会滚动到元素吗?尽管返回的坐标相差了几百,为什么还是 20 或 30?
  • 在 Firefox 中打开本机事件 - 会根据情况滚动,在 selenium bugtracker 上有很多与该问题有关的错误。对于第二个问题——根据屏幕分辨率和安装的插件、界面等大小会有所不同。例如,如果您将在 phantomjs(无头 webkit 浏览器)上运行相同的命令,那么相同命令的坐标将是正确的,这是因为它没有任何额外的接口。
  • 但是我如何获得文档大小,所以我知道不应该移动到哪里?
【解决方案2】:

我的问题是我没有等待元素加载。至少我认为这就是问题所在,因为如果我允许 selenium 等待元素然后单击它,它就会起作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-04
    • 1970-01-01
    • 2014-02-28
    • 2013-07-13
    • 2010-12-31
    • 1970-01-01
    • 2018-08-15
    • 1970-01-01
    相关资源
    最近更新 更多