如何在Python Selenium Webriver中的HTML 5画布上单击点?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (945)

我正在尝试使用python中的SeleniumWebriver 来自动在网站上使用一个简单的HTML 5应用程序。我需要我的Python程序点击位于HTML 5画布上某个特定位置的按钮,然后按下按钮,在画布周围单击并拖动一两个对象。

似乎selenuim目前无法实际定位HTML 5画布上的按钮或任何其他对象。move_to_element_with_offset就像这样:

from selenium.webdriver.common.action_chains import ActionChains
actions = ActionChains(driver)
move_to_element_with_offset(elem, 50, -250)
actions.click()
actions.perform()

这似乎不起作用。它没有引起错误,但什么也没有发生。在我看来,我可能弄错了坐标,但我想不出如何查看页面上的点击实际上是为了检查这一点。

x = '675'
y = '450'
driver.execute_script("var evt = $.Event('click', { pageX: " + x +", pageY: " + y + " } );" + "$('#diagramCanvas').trigger(evt);")

这导致了一个错误:

WebDriverException: $.Event is not a function

考虑到Python Selenium Webriver的坐标,如何让它单击HTML 5画布中的某个位置?是否有一个javascript脚本不会像上面那样引发错误,或者其他方法来做到这一点?

提问于
用户回答回答于

你尝试使用javascript的方法是使用JQuery。这就是为什么如果你想要使用它,应该将jQuery添加到yr页面。

至于Selenium,它绑定到DOM,这就是它无法定位任何东西的原因-正如你所知道的,画布只是浏览器的图像。让我们假设在“画布”var中有画布元素:

canvas = self.driver.find_element_by_id("canvas")
drawing = ActionChains(self.driver)\
    .move_by_offset(-10, -15)\
    .click(canvas)\
    .release()
drawing.perform()
用户回答回答于

根据医生move_to_element_by_offset使用相对于元素左上角的偏移量,不是从中间。因此,Python片段中的负y偏移量表示Selenium正在移动到一个位置。上边你的帆布。如果它仍然不起作用,那么更新Selenium Python绑定可能会修复它。

扫码关注云+社区

领取腾讯云代金券