介绍

Selenium根据webdriver规范实现了Java、Python、Ruby、NodeJS等语言的客户端。那么原理是什么呢? 之所以能够通过写代码来实现操作浏览器,其实很简单,基本上任何语言都可以实现这样的效果——如果它能够发送网络请求的话。因为,webdriver给出的是restFul接口,通过该接口来发送请求就可以操作浏览器。 页面加载策略:none、normal、eager。 下面介绍webdriver的webapi:

  • 新建会话

POST /session 参数示例:

{
"desiredCapabilities": {
"browserName": "chrome",
"chromeOptions": {
"args": [],
"extensions": []
},
"version": "",
"platform": "ANY"
},
"requiredCapabilities": {},
"capabilities": {
"desiredCapabilities": {
"browserName": "chrome",
"chromeOptions": {
"args": [],
"extensions": []
},
"version": "",
"platform": "ANY"
},
"requiredCapabilities": {}
},
"alwaysMatch": {
"version": "",
"platform": "ANY"
},
"firstMatch": [
{
"browserName": "chrome",
"chromeOptions": {
"args": [],
"extensions": []
}
}
]
}


  • 关闭会话

DELETE /session/{sessionId}

  • 获取超时时间

GET /session/{sessionId}/timeouts

  • 地址导航

POST /session/{sessionId}/url 参数示例:

{"url": "https://surenpi.com"}
  • 获取地址

GET /session/{sessionId}/url 响应示例:

{"sessionId":"b908f2957455781d9a3df0b3e6e773dd","status":0,"value":"http://surenpi.com/"}


  • 回退

POST /session/{sessionId}/back

  • 向前

POST /session/{sessionId}/forward

  • 刷新

POST /session/{sessionId}/refresh

  • 获取标题(title)

GET /session/{sessionId}/title

  • 查找单个元素

POST /session/{sessionId}/element

  • 查找多个元素

POST /session/{sessionId}/elements

  • 查找单个子元素

POST /session/{sessionId}/element/{elementId}/element

  • 查找多个子元素

POST /session/{sessionId}/element/{elementId}/elements

  • 判断元素是否被选中

GET /session/{sessionId}/element/{elementId}/selected 响应示例:

{"sessionId":"a98cca901dd73913b9e1ef244de9d69b","status":0,"value":false}

 

  • 获取元素属性(Attribute)

GET /session/{sessionId}/element/{elementId}/attribute/{name} 响应示例:

{"sessionId":"9cf06f37ff37033b5fcefa5ea3060194","status":0,"value":"content-sidebar widget-area"}

 

  • 获取元素属性(Property)

GET /session/{sessionId}/element/{elementId}/property/{name}

  • 获取元素的CSS值

GET /session/{sessionId}/element/{elementId}/css/{name} 响应示例:

{"sessionId":"690e0cf036990892eca8babfc341087a","status":0,"value":"303.984px"}

 

  • 获取元素的文本(Text)

GET /session/{sessionId}/element/{elementId}/text

  • 获取元素的名称(TagName)

GET /session/{sessionId}/element/{elementId}/name

  • 获取元素区域

GET /session/{sessionId}/element/{elementId}/rect

  • 判断元素是否可用

GET /session/{sessionId}/element/{elementId}/enabled 响应示例:

{"sessionId":"a98cca901dd73913b9e1ef244de9d69b","status":0,"value":true}


  • 点击元素

POST /session/{sessionId}/element/{elementId}/click

  • 清空元素

POST /session/{sessionId}/element/{elementId}/clear

  • 键盘事件

POST /session/{sessionId}/element/{elementId}/value

  • 获取页面源码

GET /session/{sessionId}/source

  • 阻塞方式执行脚本(javascript)

POST /session/{sessionId}/execute/sync

  • 异步方式执行脚本(javascript)

POST /session/{sessionId}/execute/async

  • 获取所有的cookie

GET /session/{sessionId}/cookie 响应示例:

{ "sessionId": "2114691d5c438e0f2e18d85c6a083532", "status": 0, "value": [ { "domain": ".surenpi.com", "expiry": 1533169490, "httpOnly": false, "name": "Hm_lvt_438444f54ac50def53da9410cb022c57", "path": "/", "secure": false, "value": "1501633490" } ] }

 

  • 获取cookie的指定值

GET /session/{sessionId}/cookie/{name}

  • 增加cookie

POST /session/{sessionId}/cookie

  • 删除cookie

DELETE /session/{sessionId}/cookie/{name}

  • 删除所有cookie

DELETE /session/{sessionId}/cookie

  • 执行动作

POST /session/{sessionId}/actions

  • 清除动作

DELETE /session/{sessionId}/actions

  • 取消弹出框

POST /session/{sessionId/alert/dismiss

  • 确认弹出框

POST /session/{sessionId/alert/accept

  • 获取弹出框文本

GET /session/{sessionId/alert/text

  • 设置弹出框文本

POST /session/{sessionId/alert/text

  • 截屏

GET /session/{sessionId}/screenshot

  • 元素截屏

GET /session/{sessionId}/element/{elementId}/screenshot

参考

https://w3c.github.io/webdriver/webdriver-spec.html#refresh 本文为原创,如果您当前访问的域名不是surenpi.com,请访问“​​素人派​​”。


查看原文:​​http://surenpi.com/2017/08/02/webdriver-spec/​