selenium的requests实现
准备工作
-
你在做下面的练习之前应该具备
-
安装好chrome,并通过chrome://version确认其版本号
-
安装chromedriver并与你的chrome版本相匹配,下载路径如下
https://registry.npmmirror.com/binary.html?path=chromedriver/
-
你应该有一个python+ide(如pycharm)的环境,反正下面的示例是用这些来完成的。
-
下好requests库,对语法不再阐述
-
关于chromedriver
-
本质上是个web server
-
在命令行启动chromedriver应该是如下提示
cmd>chromedriver.exe Starting ChromeDriver 100.0.4896.20 (f9d71f93d32a6487809d6f35a9670c879fe97dfe-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.
-
放在那里不要关闭哦~
关于webdriver
-
参阅: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,"123456") 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中的
- webelement.send_keys()
- webelement.click()
- driver.find_element(By.ID,”ID_VALUE”)