python中webdriver_浅谈python中selenium库调动webdriver驱动浏览器的实现原理
最近学web自动化时用到selenium库,感觉很神奇,遂琢磨了一下,写了点心得。
当我们输入以下三行代码并执行时,会发现新打开了一个浏览器窗口并访问了百度首页,然而这是怎么做到的呢?
1 from selenium importwebdriver2 driver =webdriver.Chrome()3 driver.get('http://www.baidu.com')
首先我们来看一下selenium库的结构:
很显然,selenium就是一个软件包,里面有两个一级子包,common和webdriver。导入webdriver后,webdriver.Chrome()中的Chrome又是什么呢?
原来是来自二级子包chrome下的webdriver模块里的WebDriver类,所以driver=webdriver.Chrome()中的driver是一个WebDriver类的实例化对象。我们来看看这个类:
这个类是干嘛的呢?原来它是控制谷歌浏览器驱动去驱动浏览器的,但是仔细一找,也没看到它里面有get方法呀,哦,它继承自RemoteWebDriver类,也就是二级子包remote下的webdriver模块里的WebDriver类,呵呵,这还真是个高频词汇啊!get方法应该就在这里面,去找一下:
果然,get调用上面的execute方法,传参,发现execute又调用了command_executor.execute方法:
继续查看,发现command_executor.execute方法是remote_connection.py这个模块里面的RemoteConnection类下面的,
看这个类注释,连接到远程浏览器驱动服务,很显然,浏览器驱动是服务端,selenium是客户端。在下面找到execute方法:
给远程服务端发命令command,又将命令传给下面的_request方法,发送HTTP请求给远程服务端,即浏览器驱动,这里出现了大家熟悉的请求方法get或者post,请求url,请求体,再往上看command:
原来发的是post请求,这里使用的是WebDriver wire protocol协议,即JsonWireProtocol,body部分是这个协议规定的JSON格式的字符串。
总的来说,过程还是很复杂的,至少对于我来说。
补充:对于每一条Selenium脚本,一个http请求会被创建并且发送给浏览器的驱动,浏览器驱动中包含了一个HTTP Server,用来接收这些http请求,HTTP Server接收到请求后根据请求来具体操控对应的浏览器,浏览器执行具体的测试步骤,浏览器将步骤执行结果返回给HTTP Server,HTTP Server又将结果返回给Selenium的脚本,如果是错误的http代码我们就会在控制台看到对应的报错信息。
python中webdriver_浅谈python中selenium库调动webdriver驱动浏览器的实现原理相关推荐
- python竞赛_浅谈Python在信息学竞赛中的运用及Python的基本用法
浅谈Python在信息学竞赛中的运用及Python的基本用法 前言 众所周知,Python是一种非常实用的语言.但是由于其运算时的低效和解释型编译,在信息学竞赛中并不用于完成算法程序.但正如LRJ在& ...
- python的matmul_浅谈keras中的batch_dot,dot方法和TensorFlow的matmul
概述 在使用keras中的keras.backend.batch_dot和tf.matmul实现功能其实是一样的智能矩阵乘法,比如A,B,C,D,E,F,G,H,I,J,K,L都是二维矩阵,中间点表示 ...
- python算法程序_浅谈python常用程序算法
一.冒泡排序: 1.冒泡排序是将无序的数字排列成从小到大的有序组合: 过程:对相邻的两个元素进行比较,对不符合要求的数据进行交换,最后达到数据有序的过程. 规律: 1.冒泡排序的趟数时固定的:n-1 ...
- python相关职业-浅谈Python全栈开发工程师,让程序员都眼红的职业!
原标题:浅谈Python全栈开发工程师,让程序员都眼红的职业! Python Python 的排名从去年开始就借助人工智能与独特的魅力持续上升,现在它已经成为了第一名. 与其它编程语言相比所占的优势 ...
- python中bs4_浅谈Python中的bs4基础
安装 在命令提示符框中直接输入pip install beautifulsoup4 介绍 beautifulsoup是python的一个第三方库,和xpath一样,都是用来解析html数据的. 引入 ...
- python语句中ord_浅谈Python中chr、unichr、ord字符函数之间的对比
ord是unicode ordinal的缩写,即编号 chr是character的缩写,即字符 ord和chr是互相对应转换的. 但是由于chr局限于ascii,长度只有256,于是又多了个unich ...
- 浅谈python语言_浅谈Python语言基础知识点!
一.Python 语言的简述 Python语言是一种解释型.面向对象的编程语言,是一种开源语言. Python属于动态类定义语言,也是一种强调类型语言. 二.Python 语言的特点 1.简单.高级 ...
- Python进阶(五)浅谈python匿名函数
文章目录 一.前言 二.举例 一.前言 高阶函数可以接收函数做参数,有些时候,我们不需要显式地定义函数,直接传入匿名函数更方便. 在Python中,对匿名函数提供了有限支持.还是以map()函数为例, ...
- python functools partial_浅谈python标准库--functools.partial
一.简单介绍: functools模块用于高阶函数:作用于或返回其他函数的函数.一般而言,任何可调用对象都可以作为本模块用途的函数来处理. functools.partial返回的是一个可调用的par ...
最新文章
- 非计算机专业毕业论文用游戏,计算机专业大学生毕业论文
- poj1958 Strange Towers of Hanoi 题解报告
- vue window.location.href 返回页面不刷新_前端框架vue中的keep-alive总结实践
- An impassioned circulation of affection(尺取+预处理)
- 吴恩达老师的机器学习和深度学习课程笔记打印版(全)
- Java 多线程,线程池,
- Caffe的各个版本简介
- Games101 Tansformer
- java定时任务插件_jfinal定时调度任务插件QuartzPlugin
- N76E003低功耗的处理
- 年货节买什么东西好?2022新年好物推荐
- 使用C2Prog烧写程序
- Java面试题-LuceneSolrElasticSearch
- networkx —— 基本操作及画图
- JavaWeb学习笔记(XML语言)
- 计算机领域的道德模范,2015-2016年学校道德模范董敏事迹
- 实时人体姿态估计!Efficient-HRNet:更快!更强!!
- Python pandas库|任凭弱水三千,我只取一瓢饮(3)
- 2008年5月12日四川汶川8.0级地震4级以上余震目录
- 1.HTML+CSS3 —— To:Kobe——彩虹渐变
热门文章
- linux vim编译命令行,LINUX VIM编译器常用命令总结
- pg 递归算法_PostgreSQL递归查询_20191212
- CentOs安装ssh服务
- 一款在线工具,克服Python、Java等7种语言编程障碍
- python加载函数包_Python wrapt包_程序模块 - PyPI - Python中文网
- oracle顺序读发散读,Oracle 拼音排序
- kubernetes实战篇之创建密钥自动拉取私服镜像
- js/jquery遇到的坑总结
- 三步法搞定CTF中的SQL注入题型
- LuoguP4841 城市规划