selenium 中 webdriver 原理

selenium 中 webdriver 通信流程

在这里插入图片描述
主要流程就是 selenium 通过里面的 webdriver 直接控制浏览器(通过不同浏览器的驱动)然后对目标进行UI层面的测试。

在这里插入图片描述
其本质就是 http 的通信过程:

  • 通过代码服务启动,chromedriver 启动,IP + 端口进行监听
  • python selenium webdriver 跟 chromedriver 建立连接
  • chromedriver 接受到指令后,加载浏览器配置,启动chromedriver.exe,驱动浏览器进行操作,发送 http 请求
  • chromedriver 把结果返回给 python selenium webdriver

这个 Selenium 和 Python 的关系并不大,只是用 Python 语言做一些封装,访问 Selenium 连接的服务器,通过请求参数发送对应的指令。

Python
Selenium
Browser
API
Python封装
Webdriver
browserBot
Javascript

Selenium-Binding 的实现:

Remoteconnection
Server
Webdriver
启动driver.exe
初始化客户端解析命令
HTTP
客户端
服务器
class类
  • Webdriver 类干了两件事:初始化了一个 server 实例 和 remoteConnect 实例。
  • Server 实例就干了一件事:启动了driver.exe,因此搭了一个本地服务器,你可以通过浏览器访问这个服务器。
  • RemoteConnect 就是做一个客户端,类似于 requests 干的事,当然这里有但是标准库 urlib3。
  • 其他还定义了一些 command,然后把 command 传给 connect 做为请求参数,访问对应的 url 地址。

查看 webdriver 源码

# 从selenium中导入webdriver
from selenium import webdriver



# 创建一个浏览器驱动,打开一个浏览器,与浏览器创建会话
# 启动了chromedriver.exe 并建立了连接,创建了会话ID
driver = webdriver.Chrome()

# executable_path 驱动的路径
# driver = webdriver.Chrome(executable_path=r'C:\webDriver\chromedriver.exe')

print(driver)
# 打印的是selenium对象 驱动
# <selenium.webdriver.chrome.webdriver.WebDriver (session="02d3143d34d31c6062c76cd68b5f41c8")>

# 用谷歌浏览器打开一个网站
driver.get(url='https://www.baidu.com/')

将鼠标移至 webdriver 处,按住Ctrl单击鼠标左键,查看源代码

在这里插入图片描述
通过这些代码,可以知道 selenium 是从各个地方引进 webdriver 的,然后以浏览器的名字进行命名

而这里通过实例化webdriver.Chrome() 赋值给 driver 变量,与 chromedriver 建立连接,加载浏览器配置,启动chromedriver.exe,驱动浏览器进行操作

将鼠标移至 Chrome() 处,按住Ctrl单击鼠标左键,查看源代码
在这里插入图片描述
通过这段代码,可以知道在 webdriver 类中,对 chromedriver 进行了一些初始化操作。

这个初始化方法的下方有两句注释,意思是创建了一个 chrome driver 的实例,开始了一个新的服务进行实例会话

  • executable_path 驱动的路径。
    executable_path=“chromedriver”,这里为什么没有exe后缀呢?
    是因为selenium是跨平台的,mac 和 Linux 上都可以执行这个驱动,所以这里只给定了名称,在网站上下载驱动的时候,也发现提供了多种类型的文件,Windows下的是 .exe后缀的文件。
    从下方灰色字体的注释中,可以了解到,如果不给定驱动的路径,会默认从path环境变量中去找,直到某个环境变量下有 chromedriver 为止,所以这就是为什么我们默认将驱动文件放在python的安装目录下的原因了。

  • port 端口号,这里指 chromedriver 的启动端口
    port=0 ,意思是它会自动去找一个没有被占用的端口号启动

目前知道这两个内容就可以,后面用到后再具体说明

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值