如何通过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
相关产品推荐
相关产品推荐

