3、Selenium入门:Selenium简介、WebDriver原理、环境搭建(浏览器驱动)、第一个自动化脚本

好,咱们正式开始动手了。

前面两章我们聊了自动化测试的整体思路和框架选型。从这一章开始,我带你真正进入代码的世界。Selenium,可以说是Web自动化测试的基石。不管你以后用多高级的框架,底层大概率还是它。

3.1 Selenium是什么?

Selenium,说白了就是一个浏览器自动化工具集。它不是某个公司的大产品,而是一个开源项目,发展了很多年,生态非常成熟。

它主要包含这几个组件:

  • Selenium WebDriver:核心,直接操控浏览器。我们主要学这个。
  • Selenium IDE:一个浏览器插件,可以录制回放操作。新手玩玩可以,生产环境基本不用。
  • Selenium Grid:分布式执行工具,可以让测试在多台机器、多种浏览器上并行跑。企业级部署时会用到。

我个人习惯,把Selenium理解成一个“遥控器”。你写代码,它帮你按按钮、填表单、点链接。就这么简单。

核心要点:Selenium WebDriver 是直接通过浏览器原生的驱动(Driver)来操控浏览器的,不是通过JavaScript注入。这一点很重要,意味着它的行为更接近真实用户。

3.2 WebDriver原理:它到底怎么工作的?

很多初学者会好奇:我写一段Python代码,怎么就能让Chrome浏览器动起来?

嗯,这里有个关键角色——浏览器驱动

流程是这样的:

  1. 你的测试脚本(比如Python)通过Selenium的API发送指令。
  2. Selenium WebDriver 把这个指令打包成一个标准的HTTP请求,发给浏览器驱动。
  3. 浏览器驱动(比如chromedriver)收到请求后,把它翻译成浏览器能听懂的命令。
  4. 浏览器执行操作,比如打开网页、点击按钮。
  5. 执行结果再原路返回给你的脚本。

你看,整个通信过程是“客户端-服务端”模式。你的脚本是客户端,浏览器驱动是服务端。

我的经验:我在项目中遇到过一个问题,脚本跑着跑着突然报错“连接超时”。排查了半天,发现是浏览器驱动版本和浏览器版本不匹配。你想想看,驱动版本不对,就像遥控器和电视对不上码,肯定没反应。

为什么会这样?因为浏览器厂商(Google、Mozilla)每次更新浏览器,底层协议可能就变了。所以驱动必须跟着更新。

3.3 环境搭建:装驱动,这一步别踩坑

好,理论讲完了,咱们动手搭环境。

你需要准备三样东西:

  • Python环境(假设你已经装好了,没装的话去官网下个3.8+版本)
  • Selenium库(用pip安装)
  • 浏览器驱动(比如ChromeDriver)

第一步:安装Selenium库

打开终端,执行:

pip install selenium

就这么一行。如果下载慢,可以加个国内镜像源,比如:

pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple

第二步:下载浏览器驱动

这是最容易出问题的一步。我建议你按这个步骤来:

  1. 先查看你电脑上Chrome浏览器的版本。打开Chrome,点右上角三个点 → 帮助 → 关于Google Chrome,就能看到版本号,比如 114.0.5735.110
  2. ChromeDriver官网 下载对应版本的驱动。注意,主版本号必须一致。比如浏览器是114.x,驱动也要是114.x。
  3. 下载后,把驱动文件(比如chromedriver.exe)放到一个你记得住的目录。或者直接放到Python的Scripts目录下,这样系统就能自动找到它。

避坑指南:我曾经因为偷懒,下载了一个“看起来差不多”的驱动版本,结果脚本死活跑不起来。后来老老实实去官网找了对应版本,一次通过。所以,版本匹配是铁律,别心存侥幸。

如果你用的是Firefox,那就下载geckodriver。Edge浏览器也有对应的EdgeDriver。原理都一样。

第三步:验证环境

打开你的Python交互环境或者写一个简单的脚本:

from selenium import webdriver

# 如果驱动在PATH里,直接这样写就行
driver = webdriver.Chrome()

# 如果驱动不在PATH里,需要指定路径
# driver = webdriver.Chrome(executable_path=r'D:\drivers\chromedriver.exe')

driver.get("https://www.baidu.com")
print("页面标题是:", driver.title)

driver.quit()

如果执行后,浏览器自动打开并跳转到百度首页,恭喜你,环境搭好了。

3.4 第一个自动化脚本:让浏览器听你的话

环境搭好了,我们来写一个真正有用的脚本。别光打开页面就关掉,咱们做点实际的事。

目标:打开百度,搜索“Selenium入门”,然后打印搜索结果条数。

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

# 1. 启动浏览器
driver = webdriver.Chrome()

# 2. 打开百度
driver.get("https://www.baidu.com")

# 3. 找到搜索输入框,输入关键词
# 这里用到了元素定位,后面章节会详细讲
search_box = driver.find_element(By.ID, "kw")
search_box.send_keys("Selenium入门")

# 4. 找到“百度一下”按钮,点击
search_button = driver.find_element(By.ID, "su")
search_button.click()

# 5. 等待一下,让页面加载
time.sleep(2)

# 6. 获取搜索结果
# 注意:这里只是演示,实际定位方式会更复杂
result_text = driver.find_element(By.CLASS_NAME, "nums_text").text
print("搜索结果:", result_text)

# 7. 关闭浏览器
driver.quit()

跑一下这个脚本。你会看到浏览器自动打开、输入文字、点击搜索、然后关闭。整个过程一气呵成。

我的建议:第一次跑脚本时,别急着关浏览器。你可以把 driver.quit() 这行注释掉,看看浏览器最后停留在什么页面。这样能帮你理解每一步的效果。

3.5 常见问题与解决思路

第一次跑脚本,大概率会遇到一些问题。我把最常见的列出来:

错误信息 原因 解决方法
WebDriverException: Message: 'chromedriver' executable needs to be in PATH 系统找不到驱动文件 把驱动放到Python Scripts目录,或者在代码里指定完整路径
SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version xx 驱动版本和浏览器版本不匹配 去官网下载对应版本的驱动
NoSuchElementException: Message: no such element: Unable to locate element 找不到页面元素 检查元素ID或Class是否正确,或者页面还没加载完就去找元素了

嗯,这里要注意:NoSuchElementException 是新手最容易遇到的。原因往往是页面还没加载完,脚本就急着去找元素。后面我们会讲显式等待来解决这个问题。

3.6 本章小结

这一章我们走完了Selenium入门的全流程。从原理到环境搭建,再到第一个脚本,每一步我都尽量把坑指给你看。

你想想看,其实自动化测试没那么神秘。说白了就是模拟人的操作,只不过是用代码来执行。Selenium给了我们一套标准化的接口,让我们能跨浏览器、跨语言地操控浏览器。

下一章,我们会深入元素定位。那是自动化脚本的核心技能——你连元素都找不到,还谈什么操作?

好,先练起来。把今天这个脚本跑通,你就正式入门了。