selenium的requests实现

打印 上一主题 下一主题

主题 890|帖子 890|积分 2670

准备工作


  • 你在做下面的练习之前应该具备

    • 安装好chrome,并通过chrome://version确认其版本号
    • 安装chromedriver并与你的chrome版本相匹配,下载路径如下
      1. https://registry.npmmirror.com/binary.html?path=chromedriver/
      复制代码
    • 你应该有一个python+ide(如pycharm)的环境,反正下面的示例是用这些来完成的。
    • 下好requests库,对语法不再阐述

关于chromedriver


  • 本质上是个web server
  • 在命令行启动chromedriver应该是如下提示
    1. cmd>chromedriver.exe
    2. Starting ChromeDriver 100.0.4896.20 (f9d71f93d32a6487809d6f35a9670c879fe97dfe-refs/branch-heads/4896@{#203}) on port 9515
    3. Only local connections are allowed.
    4. Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe.
    5. ChromeDriver was started successfully.
    复制代码
  • 放在那里不要关闭哦~
关于webdriver


  • 参阅:6.5的endpoint部分
    1. https://w3c.github.io/webdriver/#endpoints
    复制代码
开始

我就不封装了,你有兴趣自行封装
不一样的,打开浏览器

MethodURI TemplateCommandPOST/sessionNew Session

  • 示例代码:以chrome为例
    1. import requests
    2. server_url = 'http://127.0.0.1:9515/session'
    3. session_data = {
    4.     'desiredCapabilities':{
    5.         "caps":{"browserName":"chrome"}   #此处可以变更浏览器类型,前提你启动了对应的chromedriver或者geckodriver等。
    6.     }
    7. }
    8. session_req = requests.post(url=server_url,json=session_data)  #json传递
    复制代码
  • 是不是相当于selenium的api
    1. from selenium import webdriver
    2. driver = webdriver.Chrome()
    复制代码
  • 区别是?不需要安装selenium就可以通过api来调用了,当然会更麻烦,人家给你封装好了。
不一样的,输入网址

MethodURI TemplateCommandPOST/sessionNew SessionPOST/session/{session id}/urlNavigate To

  • 示例代码
    1. import requests
    2. from time import sleep
    3. server_url = 'http://127.0.0.1:9515/session'  #这个url不能以/结尾
    4. session_data = {
    5.     'desiredCapabilities':{
    6.         "caps":{"browserName":"chrome"}
    7.     }
    8. }
    9. session_req = requests.post(url=server_url,json=session_data)  #此处不能是data
    10. # 打开网址
    11. session_id = session_req.json().get('sessionId')  #首先要获取sessionId,是后面操作的根基
    12. dest_url = 'http://121.41.14.39:8088/index.html#/'  #比如你要打开这个网址
    13. get_url_data = {'url':dest_url}  #字典形式
    14. requests.post(server_url+'/'+session_id+'/url',json=get_url_data) #注意url的格式,跟ep对比
    复制代码
  • 是不是类似于selenium中的driver.get()
不一样的,输入,点击

MethodURI TemplateCommandPOST/sessionNew SessionPOST/session/{session id}/urlNavigate ToPOST/session/{session id}/elementFind ElementPOST/session/{session id}/element/{element id}/clickElement ClickPOST/session/{session id}/element/{element id}/valueElement Send Keys

  • 示例代码
    1. import requests
    2. from time import sleep
    3. #登录
    4. # 1. 打开浏览器
    5. server_url = 'http://127.0.0.1:9515/session'  #这个url不能以/结尾
    6. session_data = {
    7.     'desiredCapabilities':{
    8.         "caps":{"browserName":"chrome"}
    9.     }
    10. }
    11. session_req = requests.post(url=server_url,json=session_data)  #此处不能是data
    12. # 2. 输入网址
    13. session_id = session_req.json().get('sessionId')
    14. dest_url = 'http://106.14.1.150:8090/forum.php'  #这是我在阿里云部署的一个服务器
    15. get_url_data = {'url':dest_url}
    16. requests.post(server_url+'/'+session_id+'/url',json=get_url_data)
    17. # 简单封装下
    18. def get_eid(url,sid,method,method_value):  #获取elementid
    19.     data = {'using':method,'value':method_value}
    20.     return requests.post(url+'/'+sid+'/element',json=data).json().get('value').get('ELEMENT')
    21. def input_text(url,sid,eid,text): #在指定的元素上输入内容
    22.     data = {'value':[text]}
    23.     requests.post(url+'/'+sid+'/element/'+eid+'/value', json=data)
    24. def click_element(url,sid,eid): #点击指定的元素
    25.     requests.post(url + '/' + sid + '/element/' + eid + '/click')
    26.    
    27. # 3. 输入用户名
    28. # 3.1 获取用户名元素的elementid,通过id方式,其值为ls_username
    29. username_id = get_eid(server_url,session_id,'id','ls_username')
    30. input_text(server_url,session_id,username_id,'ruru023')
    31. sleep(2)
    32. # 3.2 获取密码元素的elementid,通过id方式,其值为ls_password
    33. password_id = get_eid(server_url,session_id,'id','ls_password')
    34. input_text(server_url,session_id,password_id,'123456')
    35. sleep(2)
    36. # 3.3 获取登录按钮元素的elementid,通过css selector方式,其值为.pn.vm
    37. login_button_id =  get_eid(server_url,session_id,'css selector','.pn.vm')
    38. click_element(server_url,session_id,login_button_id)
    复制代码
  • 类似于seleniumapi中的

    • webelement.send_keys()
    • webelement.click()
    • driver.find_element(By.ID,'ID_VALUE')


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

天津储鑫盛钢材现货供应商

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表