You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Selenium WebDriver API实现点击、输入等低级Actions事件?

Web API 实现WebDriver Actions 低级事件操作

问题背景

我的HTML页面受保护,常规Selenium的Click和Sendkeys方法无法生效,打算改用点击、输入这类低级事件。目前已知可以通过GET请求element/{Element ID}/rect获取元素的坐标x、y,也了解WebDriver规范里的Actions机制,但不知道怎么通过Web API来实现这类操作。之前只见过基于常规WebDriver的代码示例:

driver = webdriver.Chrome(executable_path="chromedriver")
action = ActionChains(driver)

# 目标网站URL
URL = 'https://www.testim.io/'
driver.get(URL)

# Pricing链接的XPath
pricing_anchor_xpath = '//a[text()="Pricing"]'
pricing_element = driver.find_element('xpath', pricing_anchor_xpath)
action.move_to_element(pricing_element).click().perform()

实现方法

直接调用WebDriver的Actions API端点就能实现这类低级事件,核心是构造符合规范的动作序列并通过POST请求发送:

1. 获取元素坐标(可选,也可直接用元素ID定位)

如果你已有元素ID,先发送GET请求获取元素的位置和尺寸:

GET /session/{session_id}/element/{element_id}/rect

返回的JSON会包含x(元素左上角x坐标)、y(左上角y坐标)、width、height,可计算出元素中心点坐标:x_center = x + width/2,y_center = y + height/2。

2. 构造点击动作的POST请求

通过POST请求/session/{session_id}/actions发送动作序列,以下是模拟移动到元素并点击的示例JSON请求体:

{
  "actions": [
    {
      "type": "pointer",
      "id": "mouse1",
      "parameters": {
        "pointerType": "mouse"
      },
      "actions": [
        {
          "type": "pointerMove",
          "duration": 0,
          "elementId": "{element_id}"
        },
        {
          "type": "pointerDown",
          "button": 0
        },
        {
          "type": "pointerUp",
          "button": 0
        }
      ]
    }
  ]
}

如果想用坐标定位,把pointerMove的参数换成计算好的中心点坐标即可:

{
  "type": "pointerMove",
  "duration": 0,
  "x": x_center,
  "y": y_center
}

3. 模拟输入文本的动作示例

如果要实现类似Sendkeys的效果,构造键盘动作的请求体:

{
  "actions": [
    {
      "type": "key",
      "id": "keyboard1",
      "actions": [
        {
          "type": "keyDown",
          "value": "h"
        },
        {
          "type": "keyUp",
          "value": "h"
        },
        {
          "type": "keyDown",
          "value": "e"
        },
        {
          "type": "keyUp",
          "value": "e"
        }
      ]
    }
  ]
}

注意事项

  • 替换请求中的{session_id}和{element_id}为实际的会话ID和元素ID
  • 动作序列要符合实际操作逻辑(比如点击需先执行pointerDown再执行pointerUp)
  • 不同类型的动作(指针/键盘)要放在对应的动作组内

内容的提问来源于stack exchange,提问作者Fixin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 21:06:21