重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
你在做下面的练习之前应该具备
我们提供的服务有:网站建设、成都网站设计、微信公众号开发、网站优化、网站认证、福鼎ssl等。为近千家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的福鼎网站制作公司
安装好chrome,并通过chrome://version确认其版本号
安装chromedriver并与你的chrome版本相匹配,下载路径如下
https://registry.npmmirror.com/binary.html?path=chromedriver/
你应该有一个python+ide(如pycharm)的环境,反正下面的示例是用这些来完成的。
下好requests库,对语法不再阐述
本质上是个web server
在命令行启动chromedriver应该是如下提示
cmd>chromedriver.exe
Starting ChromeDriver 100.0.4896.20 (f9d71f93d32ad6f35a9670c879fe97dfe-refs/branch-heads/4896@{#203}) on port 9515
Only local connections are allowed.
Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe.
ChromeDriver was started successfully.
放在那里不要关闭哦~
参阅:6.5的endpoint部分
https://w3c.github.io/webdriver/#endpoints
我就不封装了,你有兴趣自行封装
Method | URI Template | Command |
---|---|---|
POST | /session | New Session |
示例代码:以chrome为例
import requests
server_url = 'http://127.0.0.1:9515/session'
session_data = {
'desiredCapabilities':{
"caps":{"browserName":"chrome"} #此处可以变更浏览器类型,前提你启动了对应的chromedriver或者geckodriver等。
}
}
session_req = requests.post(url=server_url,json=session_data) #json传递
是不是相当于selenium的api
from selenium import webdriver
driver = webdriver.Chrome()
区别是?不需要安装selenium就可以通过api来调用了,当然会更麻烦,人家给你封装好了。
Method | URI Template | Command |
---|---|---|
POST | /session | New Session |
POST | /session/{session id}/url | Navigate To |
示例代码
import requests
from time import sleep
server_url = 'http://127.0.0.1:9515/session' #这个url不能以/结尾
session_data = {
'desiredCapabilities':{
"caps":{"browserName":"chrome"}
}
}
session_req = requests.post(url=server_url,json=session_data) #此处不能是data
# 打开网址
session_id = session_req.json().get('sessionId') #首先要获取sessionId,是后面操作的根基
dest_url = 'http://121.41.14.39:8088/index.html#/' #比如你要打开这个网址
get_url_data = {'url':dest_url} #字典形式
requests.post(server_url+'/'+session_id+'/url',json=get_url_data) #注意url的格式,跟ep对比
是不是类似于selenium中的driver.get()
Method | URI Template | Command |
---|---|---|
POST | /session | New Session |
POST | /session/{session id}/url | Navigate To |
POST | /session/{session id}/element | Find Element |
POST | /session/{session id}/element/{element id}/click | Element Click |
POST | /session/{session id}/element/{element id}/value | Element Send Keys |
示例代码
import requests
from time import sleep
#登录
# 1. 打开浏览器
server_url = 'http://127.0.0.1:9515/session' #这个url不能以/结尾
session_data = {
'desiredCapabilities':{
"caps":{"browserName":"chrome"}
}
}
session_req = requests.post(url=server_url,json=session_data) #此处不能是data
# 2. 输入网址
session_id = session_req.json().get('sessionId')
dest_url = 'http://106.14.1.150:8090/forum.php' #这是我在阿里云部署的一个服务器
get_url_data = {'url':dest_url}
requests.post(server_url+'/'+session_id+'/url',json=get_url_data)
# 简单封装下
def get_eid(url,sid,method,method_value): #获取elementid
data = {'using':method,'value':method_value}
return requests.post(url+'/'+sid+'/element',json=data).json().get('value').get('ELEMENT')
def input_text(url,sid,eid,text): #在指定的元素上输入内容
data = {'value':[text]}
requests.post(url+'/'+sid+'/element/'+eid+'/value', json=data)
def click_element(url,sid,eid): #点击指定的元素
requests.post(url + '/' + sid + '/element/' + eid + '/click')
# 3. 输入用户名
# 3.1 获取用户名元素的elementid,通过id方式,其值为ls_username
username_id = get_eid(server_url,session_id,'id','ls_username')
input_text(server_url,session_id,username_id,'ruru023')
sleep(2)
# 3.2 获取密码元素的elementid,通过id方式,其值为ls_password
password_id = get_eid(server_url,session_id,'id','ls_password')
input_text(server_url,session_id,password_id,'')
sleep(2)
# 3.3 获取登录按钮元素的elementid,通过css selector方式,其值为.pn.vm
login_button_id = get_eid(server_url,session_id,'css selector','.pn.vm')
click_element(server_url,session_id,login_button_id)
类似于seleniumapi中的