自动化测试工具 Selenium 入门指南
Selenium 是一款强大的自动化测试工具,可用于模拟用户在浏览器中的各种操作。它支持多种浏览器(如 Chrome、Firefox、Edge 等)和多种编程语言(如 Python、Java、C# 等),广泛应用于 Web 应用程序的自动化测试、网页数据爬取、自动化操作等场景。
一、Selenium 的安装
要开始使用 Selenium,首先需要安装它。使用 Python 的 pip 包管理器可以轻松完成安装。打开命令行终端,并执行以下命令:
pip install selenium
如果你使用的是虚拟环境,请确保在激活虚拟环境后再执行此命令。安装完成后,你就可以在 Python 代码中导入并使用 Selenium 库了。
在安装过程中,可能会遇到一些常见问题,下面是一些解决方案:
- 网络问题:如果在执行
pip install
命令时遇到网络连接超时或失败的情况,可以尝试使用国内的镜像源来加速下载。例如,使用清华大学的 pip 镜像:
pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple
- 权限问题:如果你没有足够的权限在全局环境中安装包,可能会看到 "Permission denied" 错误。此时,可以考虑以下两种解决方案:
- 使用虚拟环境:虚拟环境可以让你在项目特定的环境中安装包,而不需要管理员权限。创建和激活虚拟环境的命令如下:
# 创建虚拟环境 python -m venv myenv# 激活虚拟环境(Windows) myenv\Scripts\activate# 激活虚拟环境(Linux/Mac) source myenv/bin/activate
- 使用
--user
选项:在安装命令后添加--user
选项,将包安装到用户目录下:pip install selenium --user
- 使用虚拟环境:虚拟环境可以让你在项目特定的环境中安装包,而不需要管理员权限。创建和激活虚拟环境的命令如下:
安装完成后,你可以通过以下代码验证 Selenium 是否安装成功:
import selenium
print(selenium.__version__) # 打印Selenium版本号
如果能够正常打印出版本号,说明 Selenium 已经成功安装。
二、Edge 浏览器驱动的下载与配置
Selenium 需要对应的浏览器驱动才能控制浏览器。对于 Edge 浏览器,你需要下载 Microsoft Edge WebDriver。
-
确定 Edge 浏览器版本:打开 Edge 浏览器,点击右上角的三个点(...),选择 "帮助和反馈" > "关于 Microsoft Edge",查看版本号。版本号通常显示为类似于 "114.0.1823.51" 的格式。
-
下载对应版本的 WebDriver:访问 Microsoft Edge WebDriver 下载页面,选择与你浏览器版本匹配的 WebDriver 进行下载。具体步骤如下:
- 在下载页面中,找到与你 Edge 浏览器版本完全匹配的 WebDriver 版本。如果找不到完全匹配的版本,选择最接近且不高于你浏览器版本的驱动。
- 根据你的操作系统(Windows、macOS 或 Linux)选择相应的下载包。
- 下载完成后,得到一个压缩文件(如.zip 或.msi 格式)。
-
解压并放置驱动文件:将下载的压缩包解压,得到一个 exe 文件(如 msedgedriver.exe)。将此文件放在 Python 解释器的根目录中。你可以通过以下 Python 代码查看解释器的根目录:
import sys
print(sys.executable)
执行上述代码后,会输出 Python 解释器的路径,例如:
C:\Python39\python.exe
在这个例子中,Python 解释器的根目录是C:\Python39\
,你需要将msedgedriver.exe
文件复制到这个目录中。
除了将驱动文件放在 Python 解释器根目录外,还有其他几种配置方式:
-
将驱动路径添加到系统环境变量:
- 右键点击 "此电脑",选择 "属性"
- 点击 "高级系统设置"
- 在 "系统属性" 窗口中,点击 "环境变量" 按钮
- 在 "系统变量" 列表中,找到 "Path" 变量,点击 "编辑"
- 点击 "新建",添加驱动文件所在的目录路径
- 确认所有窗口,使更改生效
-
在代码中显式指定驱动路径:
如果你不想修改系统环境变量或 Python 解释器目录,也可以在代码中明确指定驱动的路径:from selenium import webdriver from selenium.webdriver.edge.service import Service# 显式指定驱动路径 edge_driver_path = "D:/webdrivers/msedgedriver.exe" # 根据实际路径修改 service = Service(edge_driver_path) driver = webdriver.Edge(service=service)
三、使用 Selenium 打开浏览器
下面是一个简单的 Python 代码示例,展示如何使用 Selenium 打开 Edge 浏览器并访问百度网站:
from selenium import webdriver
from selenium.webdriver.edge.service import Service
import time# 设置Edge驱动的路径
edge_driver_path = "msedgedriver.exe" # 如果已放在Python根目录,可直接这样写# 创建Service对象
service = Service(edge_driver_path)# 创建Edge浏览器实例
driver = webdriver.Edge(service=service)try:# 打开百度网站driver.get("https://www.baidu.com")# 获取页面标题并打印title = driver.titleprint(f"当前页面标题: {title}")# 等待5秒钟,以便观察time.sleep(5)except Exception as e:print(f"发生错误: {e}")
finally:# 关闭浏览器driver.quit()
在上述代码中,我们首先导入了必要的模块,然后创建了一个 Edge 浏览器的 Service 对象,接着使用该 Service 创建了浏览器实例。通过get
方法打开了百度网站,使用time.sleep
让程序暂停 5 秒以便我们观察,最后使用quit
方法关闭了浏览器。
让我们详细分析一下这段代码:
-
导入模块:
webdriver
:提供了各种浏览器的驱动类Service
:用于配置和启动浏览器驱动服务time
:用于添加延时,方便观察程序执行过程
-
创建浏览器实例:
- 通过
Service
类指定驱动路径 - 使用
webdriver.Edge
创建 Edge 浏览器实例
- 通过
-
浏览器操作:
driver.get(url)
:打开指定 URL 的网页driver.title
:获取当前页面的标题driver.quit()
:关闭浏览器并终止驱动服务
-
异常处理:
- 使用
try-except-finally
结构确保即使发生异常,浏览器也能被正确关闭
- 使用
四、Selenium 网页图片提取实战
下面我们通过一个实战项目,展示如何使用 Selenium 从网页上提取图片。我们以 Unsplash 网站(一个提供高质量免费图片的网站)为例,提取搜索结果中的图片链接。
from selenium import webdriver
from selenium.webdriver.edge.options import Options
import re
import requests
import time
edgetest=Options() #Option对象用于对浏览器行为与属性的配置
#binary_location指明驱动的浏览器二进制文件地址,因为用户的默认的浏览器不一定是edge浏览器
edgetest.binary_location=r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"
driver=webdriver.Edge(options=edgetest)
driver.get('https://www.ptpress.com.cn/search?keyword=python&jc=')#进入人民邮电出版社界面
time.sleep(1)#让程序休眠1秒,让页面加载出来,不加可能导致页面未加载出来就退出
#正则表达式从源码中提取图片地址
ls=re.findall(r'<img src="(.+?jpg)"></div>',driver.page_source)
i=1
for url in ls:r=requests.get(url)with open('zxc\\'+str(i)+'.jpg','wb') as f:#在当前的相对路径下已经创建了zxc这个文件夹。f.write(r.content)i+=1
这个代码实现了以下功能:
1. 浏览器配置与初始化
-
指定浏览器路径:通过
Options
类设置 Edge 浏览器的安装路径(默认为系统默认位置)。 -
创建浏览器实例:启动 Edge 浏览器并准备访问网页。
2. 访问目标网页
-
搜索关键词:打开人民邮电出版社的搜索页面,自动填入关键词
python
,并加载搜索结果。 -
强制等待:使用
time.sleep(1)
暂停 1 秒,确保页面元素加载完成(此方法不够可靠,后续可优化)。
3. 提取图片 URL
-
获取页面源码:通过
driver.page_source
获取当前页面的 HTML 代码。 -
正则表达式匹配:使用正则表达式
<img src="(.+?jpg)"></div>
提取所有图片 URL。-
该正则假设图片标签紧跟在
</div>
前,且 URL 以.jpg
结尾。
-
4. 下载并保存图片
-
遍历 URL 列表:对每个匹配到的图片 URL,使用
requests.get()
发送 HTTP 请求下载图片内容。 -
保存文件:将图片内容写入本地文件,命名为
1.jpg
,2.jpg
等,保存在当前目录下的zxc
文件夹中。