原理与安装

原理

点击这里,边看视频讲解,边学习以下内容


Selenium 是一个 Web 应用的自动化框架。

通过它,我们可以写出自动化程序,像人一样在浏览器里操作web界面。 比如点击界面按钮,在文本框中输入文字 等操作。

而且还能从web界面获取信息。 比如获取12306票务信息,招聘网站职位信息,财经网站股票价格信息 等等,然后用程序进行分析处理。

Selenium 的自动化原理是这样的

白月黑羽Python3教程

从上图可以看出:

我们写的自动化程序 需要使用 客户端库

我们程序的自动化请求都是通过这个库里面的编程接口发送给浏览器。

比如,我们要模拟用户点击界面按钮, 自动化程序里面就应该 调用客户端库相应的函数, 就会发送 点击元素 的请求给 下方的 浏览器驱动。 然后,浏览器驱动再转发这个请求给浏览器。

这个自动化程序发送给浏览器驱动的请求 是HTTP请求。

客户端库从哪里来的? 是Selenium组织提供的。

Selenium组织提供了多种 编程语言的Selenium客户端库, 包括 java,python,js, ruby等,方便不同编程语言的开发者使用。

我们只需要安装好客户端库,调用这些库,就可以发出自动化请求给浏览器咯。


浏览器驱动 也是一个独立的程序,是由浏览器厂商提供的, 不同的浏览器需要不同的浏览器驱动。 比如 Chrome浏览器和 火狐浏览器有 各自不同的驱动程序。

浏览器驱动接收到我们的自动化程序发送的界面操作请求后,会转发请求给浏览器, 让浏览器去执行对应的自动化操作。

浏览器执行完操作后,会将自动化的结果返回给浏览器驱动, 浏览器驱动再通过HTTP响应的消息返回给我们的自动化程序的客户端库。

自动化程序的客户端库 接收到响应后,将结果转化为 数据对象 返回给 我们的代码。

我们的程序就可以知道这次自动化操作的结果如何了。


我们再总结一下,selenium 自动化流程如下:

  1. 自动化程序调用Selenium 客户端库函数(比如点击按钮元素)
  2. 客户端库会发送Selenium 命令 给浏览器的驱动程序
  3. 浏览器驱动程序接收到命令后 ,驱动浏览器去执行命令
  4. 浏览器执行命令
  5. 浏览器驱动程序获取命令执行的结果,返回给我们自动化程序
  6. 自动化程序对返回结果进行处理


安装

点击这里,边看视频讲解,边学习以下内容


Selenium环境的安装主要就是安装两样东西: 客户端库 和浏览器 驱动


安装客户端库

不同的编程语言选择不同的Selenium客户端库。

对应我们Python语言来说,Selenium客户端库的安装非常简单,用 pip 命令即可。

打开 命令行程序,运行如下命令

pip install selenium


安装浏览器驱动

浏览器驱动 是和 浏览器对应的。 不同的浏览器 需要选择不同的浏览器驱动。

目前主流的浏览器中, Chrome 浏览器对Selenium自动化的支持更加成熟一些。

我们就以Chrome浏览器为例。

请大家安装最新版的Chrome浏览器,可以点击这里下载

大家打开下面的连接,访问Chrome 浏览器的驱动下载页面

Chrome 浏览器驱动下载地址

注意浏览器驱动 必须要和浏览器版本匹配,下图红圈里面的版本号 就是和浏览器版本号对应的

浏览器驱动

比如:当前Chrome浏览器版本是72, 就需要下载72开头的目录里面的驱动程序 。

打开目录,里面有3个zip包,分别对应Linux、Mac、Windows平台。

如果我们是Windows平台的电脑,就下载 chromedriver_win32.zip

这是个zip包,下载下来之后,解压里面的程序文件 chromedriver.exe 到某个目录下面,注意这个目录的路径最好是没有中文名和空格的。

比如,解压到 d:\webdrivers 目录下面。

也就是保证我们的Chrome浏览器驱动路径为 d:\webdrivers\chromedriver.exe


基于selenium的web自动化环境搭建就是这些,比较简单。

简单示例

点击这里,边看视频讲解,边学习以下内容


下面的代码, 可以自动化的 打开Chrome浏览器,并且自动化打开百度网站,可以大家可以运行一下看看。

from selenium import webdriver

# 创建 WebDriver 对象,指明使用chrome浏览器驱动
wd = webdriver.Chrome(r'd:\webdrivers\chromedriver.exe')

# 调用WebDriver 对象的get方法 可以让浏览器打开指定网址
wd.get('https://www.baidu.com')


其中,下面这行代码,就会运行浏览器驱动,并且运行Chrome浏览器

wd = webdriver.Chrome(r'd:\webdrivers\chromedriver.exe')

注意,等号右边 返回的是 WebDriver 类型的对象,我们可以通过这个对象来操控浏览器,比如 打开网址、选择界面元素等。


而下面这行代码,就是使用 WebDriver 的 get 方法 打开网址 百度

wd.get('https://www.baidu.com')

执行上面这行代码时,自动化程序就发起了 打开百度网址的 请求消息 ,通过浏览器驱动, 给 Chrome浏览器。

Chome浏览器接收到该请求后,就会打开百度网址,通过浏览器驱动, 告诉自动化程序 打开成功。


执行完自动化代码,如果想关闭浏览器窗口可以调用WebDriver对象的 quit 方法,像这样 wd.quit()


浏览器驱动目录加入环境变量Path

前面,我们的代码创建 WebDriver对象时,需要指定浏览器驱动路径,比如

wd = webdriver.Chrome(r'd:\webdrivers\chromedriver.exe')

如果,我们把浏览器驱动 所在目录 加入环境变量 Path, 再写代码时,就可以无需指定浏览器驱动路径了,像下面这样

wd = webdriver.Chrome()

因为,Selenium会自动在环境变量 Path 指定的那些目录里查找名为chromedriver.exe 的文件。

一定要注意的是, 加入环境变量 Path 的,

不是浏览器驱动全路径,比如 d:\webdrivers\chromedriver.exe

而是 浏览器驱动所在目录,比如 d:\webdrivers


那么,selenium又是如何 自动化地 在网页上 点击、输入、获取信息,将在接下来的章节要学习。


扫码分享给朋友,一起学更有动力哦




课后练习

根据教程,分别下载

  • chrome浏览器

  • webdriver驱动

  • pip 安装 selenium python 客户端库


然后需要大家按照下面的步骤安装一个练习自动化的网站系统

点击百度网盘链接 ,下载 白月SMS系统 压缩包 bysms.zip

下载解压bysms.zip后,进入bysms目录,双击运行runserver.bat 即可启动 白月SMS系统。 出现下面这样的信息

\bysms\bysms>bysms.exe runserver 80
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).

You have 2 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): auth.
Run 'python manage.py migrate' to apply them.
September 07, 2019 - 22:22:19
Django version 2.2.4, using settings 'bysms.settings'
Starting development server at http://127.0.0.1:80/
Quit the server with CTRL-BREAK.

注意:该窗口不能关闭,否则web 系统就会停止

然后,编写一个selenium自动化程序,能够自动化打开 网站首页 http://127.0.0.1/mgr/sign.html