最近学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驱动浏览器的实现原理相关推荐

  1. python竞赛_浅谈Python在信息学竞赛中的运用及Python的基本用法

    浅谈Python在信息学竞赛中的运用及Python的基本用法 前言 众所周知,Python是一种非常实用的语言.但是由于其运算时的低效和解释型编译,在信息学竞赛中并不用于完成算法程序.但正如LRJ在& ...

  2. 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都是二维矩阵,中间点表示 ...

  3. python算法程序_浅谈python常用程序算法

    一.冒泡排序: 1.冒泡排序是将无序的数字排列成从小到大的有序组合: 过程:对相邻的两个元素进行比较,对不符合要求的数据进行交换,最后达到数据有序的过程. 规律: 1.冒泡排序的趟数时固定的:n-1 ...

  4. python相关职业-浅谈Python全栈开发工程师,让程序员都眼红的职业!

    原标题:浅谈Python全栈开发工程师,让程序员都眼红的职业! Python Python 的排名从去年开始就借助人工智能与独特的魅力持续上升,现在它已经成为了第一名. 与其它编程语言相比所占的优势 ...

  5. python中bs4_浅谈Python中的bs4基础

    安装 在命令提示符框中直接输入pip install beautifulsoup4 介绍 beautifulsoup是python的一个第三方库,和xpath一样,都是用来解析html数据的. 引入 ...

  6. python语句中ord_浅谈Python中chr、unichr、ord字符函数之间的对比

    ord是unicode ordinal的缩写,即编号 chr是character的缩写,即字符 ord和chr是互相对应转换的. 但是由于chr局限于ascii,长度只有256,于是又多了个unich ...

  7. 浅谈python语言_浅谈Python语言基础知识点!

    一.Python 语言的简述 Python语言是一种解释型.面向对象的编程语言,是一种开源语言. Python属于动态类定义语言,也是一种强调类型语言. 二.Python 语言的特点 1.简单.高级 ...

  8. Python进阶(五)浅谈python匿名函数

    文章目录 一.前言 二.举例 一.前言 高阶函数可以接收函数做参数,有些时候,我们不需要显式地定义函数,直接传入匿名函数更方便. 在Python中,对匿名函数提供了有限支持.还是以map()函数为例, ...

  9. python functools partial_浅谈python标准库--functools.partial

    一.简单介绍: functools模块用于高阶函数:作用于或返回其他函数的函数.一般而言,任何可调用对象都可以作为本模块用途的函数来处理. functools.partial返回的是一个可调用的par ...

最新文章

  1. 非计算机专业毕业论文用游戏,计算机专业大学生毕业论文
  2. poj1958 Strange Towers of Hanoi 题解报告
  3. vue window.location.href 返回页面不刷新_前端框架vue中的keep-alive总结实践
  4. An impassioned circulation of affection(尺取+预处理)
  5. 吴恩达老师的机器学习和深度学习课程笔记打印版(全)
  6. Java 多线程,线程池,
  7. Caffe的各个版本简介
  8. Games101 Tansformer
  9. java定时任务插件_jfinal定时调度任务插件QuartzPlugin
  10. N76E003低功耗的处理
  11. 年货节买什么东西好?2022新年好物推荐
  12. 使用C2Prog烧写程序
  13. Java面试题-LuceneSolrElasticSearch
  14. networkx —— 基本操作及画图
  15. JavaWeb学习笔记(XML语言)
  16. 计算机领域的道德模范,2015-2016年学校道德模范董敏事迹
  17. 实时人体姿态估计!Efficient-HRNet:更快!更强!!
  18. Python pandas库|任凭弱水三千,我只取一瓢饮(3)
  19. 2008年5月12日四川汶川8.0级地震4级以上余震目录
  20. 1.HTML+CSS3 —— To:Kobe——彩虹渐变

热门文章

  1. linux vim编译命令行,LINUX VIM编译器常用命令总结
  2. pg 递归算法_PostgreSQL递归查询_20191212
  3. CentOs安装ssh服务
  4. 一款在线工具,克服Python、Java等7种语言编程障碍
  5. python加载函数包_Python wrapt包_程序模块 - PyPI - Python中文网
  6. oracle顺序读发散读,Oracle 拼音排序
  7. kubernetes实战篇之创建密钥自动拉取私服镜像
  8. js/jquery遇到的坑总结
  9. 三步法搞定CTF中的SQL注入题型
  10. LuoguP4841 城市规划