准备工作

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

    • 安装好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')

requests进行webdriver协议,模仿selenium的更多相关文章

  1. java-appium-527 WebDriver协议&针对控件的操作

    1.WebDriver协议 https://www.w3.org/TR/webdriver/#list-of-endpoints 1.1查看当前所有的session情况 http://127.0.0. ...

  2. webdriver介绍&与Selenium RC的比较

    什么是webdriver? webdriver是一个web自动化测试框架,不同于selenium IDE只能运行在firefox上,webdriver能够在不同的浏览器上执行你的web测试用例.其支持 ...

  3. nightwatchjs 基于nodejs&& webdriver 协议的自动化测试&&持续集成框架

    nightwatchjs 是基于nodejs&& webdriver 协议的自动化测试&&持续集成框架 参考架构 参考资料 http://nightwatchjs.or ...

  4. 百度贴吧自动回帖的两种方式,使用requests(urllib2)和selenium两种方式回帖

    本文介绍,回复贴吧指定某楼层主的帖子的方法.在这里不介绍无限发主贴和无限回复主贴的方法,无限发主题帖会爆吧,引起别人的反感,并且很容易遭到吧主的封杀:无限回主题帖,会让整个帖子的每楼的回复充满了自己的 ...

  5. Webdriver概述(selenium对应浏览器版本)

    Webdriver (Selenium2)是一种用于Web应用程序的自动测试工具,它提供了一套友好的API,与Selenium 1(Selenium-RC)相比,Webdriver 的API更容易理解 ...

  6. Requests方法 -- Http协议的短链接与长连接介绍

    转载于简书: 作者:熊师傅链接:https://www.jianshu.com/p/3fc3646fad80 1.以前的误解 很久之前就听说过长连接的说法,而且还知道HTTP1.0协议不支持长连接,从 ...

  7. 【转载】【selenium+Python WebDriver】之selenium的定位以及切换frame(iframe)

    感谢CSDN:huilan_same大神 网页地址:http://blog.csdn.net/huilan_same/article/details/52200586

  8. selenium源码分析-webdriver(二)

    最近比较空闲就仔细看了一下Selenium的源码,因为主要是使用WebDriver所以重点关注了一下WebDriver的工作原理.在前一篇blog里已经解释过了WebDriver与之前Selenium ...

  9. Selenium WebDriver 处理cookie

    在使用webdriver测试中,很多地方都使用登陆,cookie能够实现不必再次输入用户名密码进行登陆. 首先了解一下Java Cookie类的一些方法. 在jsp中处理cookie数据的常用方法: ...

  10. <译>Selenium Python Bindings 6 - WebDriver API

    本章涉及Selenium WebDriver的所有接口. Recommended Import Style 推荐的导入风格如下: from selenium import webdriver 然后,你 ...

随机推荐

  1. VMware ESXi 8.0 SLIC 2.6 & macOS Unlocker (Oct 2022 GA)

    ESXi 8.0.0 GA (General Availability) 请访问原文 VMware ESXi 8.0 SLIC 2.6 & macOS Unlocker (Oct 2022 G ...

  2. 嵌入式-C语言基础:二级指针

    二级指针:可以理解为指向指针的指针,存放的是指针变量的地址. 下面用一级指针来保存一个指针变量的地址: #include<stdio.h> int main() { int *p1; in ...

  3. Vue2学习笔记

    1.插值语法: 1.1.功能: 用于解析标签体内容 1.2.写法: {{ xxx }},xxx是js表达式,且可以直接读取到data中的所有属性. 2.收集表单数据 若:<input type= ...

  4. Java:ArrayList的基本使用(学习笔记)

    ​ 集合和数组的对比(为什么要有集合) 分为俩点 1. 长度:数组的长度是固定的,集合的长度是可变的. 2. 存储类型: 数组:可以存储基本数据类型,引用数据类型. 集合:只能存储引用数据类型. 小t ...

  5. Go语言核心36讲15---结构体

    我们都知道,结构体类型表示的是实实在在的数据结构.一个结构体类型可以包含若干个字段,每个字段通常都需要有确切的名字和类型. 前导内容:结构体类型基础知识 当然了,结构体类型也可以不包含任何字段,这样并 ...

  6. <二>派生类的构造过程

    派生类从继承可以继承来所有的成员(变量和方法) 除了构造函数和析构函数 派生类怎么初始化从基类继承来的成员变量的呢?通过调用基类的构造函数来初始化 派生类的构造函数和析构函数,负责初始化和清理派生类部 ...

  7. 在实际应用中联合体union的妙用

    关键字union,又称为联合体.共用体,联合体的声明和结构体类似,但是它的行为方式又和结构体不同,这里的行为方式主要指的是其在内存中的体现,结构体中的成员每一个占据不同的内存空间,而联合体中的所有成员 ...

  8. 2.6:Python数据存取-文件、文件夹及目录、数据库

    一.Python文件读写 1.文件的打开模式 <class '_io.TextIOWrapper'>和<class '_io.BufferedReader'>.python使用 ...

  9. 【十次方微服务后台开发】Day02:加密与JWT鉴权、微服务注册中心、配置中心、熔断器、网关、消息总线、部署与持续集成、容器管理与监控Rancher、influxDB、grafana

    一.密码加密与微服务鉴权JWT 1.BCrypt密码加密 Spring Security 提供了BCryptPasswordEncoder类,实现Spring的PasswordEncoder接口使用B ...

  10. Python 什么是flask框架?快速入门(flask安装,登录,新手三件套,登录认证装饰器,配置文件,路由系统,CBV)

    目录 一:Python flask框架 前言 补充一下,我们前面学习的库都是叫模块,那么框架与库的区别? 二:flask 框架概述 1.简介 2.须知: 3.flask框架的优势 三:flask 安装 ...