第一个自动化脚本:打开浏览器、访问网页、关闭浏览器
说实话,很多初学者第一次接触 WebDriver 时,都会被各种概念吓到。什么「驱动」、「会话」、「节点」……听着就头大。
但我想告诉你一个秘密:你只需要三行代码,就能完成第一个自动化脚本。
不信?咱们直接上手。
1. 三行代码,搞定第一个脚本
先别管什么原理,咱们先跑起来再说。我个人习惯用 Chrome 浏览器做演示,因为它的开发者工具最成熟。
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
driver.quit()
嗯,就这三行。你复制到 Python 环境里,只要装好了 Selenium 和 ChromeDriver,就能看到浏览器自动打开、访问百度、然后关闭。
我第一次跑通这个脚本时,说实话挺激动的。虽然只是打开一个网页,但那种「浏览器听我指挥」的感觉,真的很爽。
2. 这三行代码到底干了什么?
咱们一行一行拆开看。
第一行:创建驱动对象
driver = webdriver.Chrome()
这行代码做了两件事:
- 启动 Chrome 浏览器进程——你会在任务管理器里看到一个 chrome.exe 跑起来
- 建立 WebDriver 与浏览器的通信通道——说白了,就是给浏览器装了个「遥控器」
我在项目中遇到过一个问题:有同学以为这行只是「声明一个变量」,结果代码跑完发现浏览器没关,内存里挂了十几个 chrome 进程。嗯,这行代码是真的在启动程序,不是闹着玩的。
第二行:访问网页
driver.get("https://www.baidu.com")
这行代码告诉浏览器:「去这个地址」。WebDriver 会等待页面完全加载完成后,才继续执行下一行。
你想想看,如果页面加载到一半就往下执行,那后面的操作肯定会报错。所以 Selenium 默认会等待页面加载完成,这个机制叫「隐式等待」,后面我们会详细讲。
第三行:关闭浏览器
driver.quit()
这行代码关闭浏览器窗口,并结束 WebDriver 进程。注意,它和 driver.close() 不一样:
| 方法 | 作用 | 适用场景 |
|---|---|---|
quit() |
关闭整个浏览器,结束所有窗口和进程 | 脚本执行完毕,彻底退出 |
close() |
只关闭当前窗口 | 多窗口操作时,关闭其中一个 |
3. WebDriver 核心概念:你其实已经用到了
刚才那三行代码,背后涉及了 WebDriver 的三个核心概念。咱们一个一个说。
概念一:WebDriver 是一个「遥控器」
WebDriver 不是浏览器本身,它是一个中间层。它通过浏览器厂商提供的协议(比如 Chrome 的 DevTools Protocol),向浏览器发送指令。
说白了,就像你用遥控器控制电视——你按「音量+」,电视就响一点。WebDriver 调用 get(),浏览器就去访问网页。
概念二:会话(Session)
每次你创建 webdriver.Chrome(),就建立了一个新的会话。这个会话有一个唯一的 ID,WebDriver 通过这个 ID 来识别和控制对应的浏览器窗口。
你可以把会话想象成「一次自动化任务的上下文」。同一个脚本里,你可以创建多个会话(多个浏览器窗口),但每个会话是独立的。
概念三:等待机制
刚才提到 get() 会等待页面加载完成。这个「等待」是 WebDriver 内置的隐式等待机制。但实际项目中,页面加载完成后,里面的元素可能还没渲染出来——这时候就需要显式等待了。
不过别急,那是后面章节的内容。现在你只需要知道:WebDriver 默认会等页面加载,但不会等页面里的动态内容。
4. 一个完整的脚本模板
在实际项目中,我一般会这样写第一个脚本:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time
# 配置选项(可选)
options = Options()
options.add_argument("--start-maximized") # 最大化窗口
# 创建驱动
driver = webdriver.Chrome(options=options)
try:
# 访问网页
driver.get("https://www.baidu.com")
# 打印页面标题,确认访问成功
print("页面标题:", driver.title)
# 等待几秒,让你亲眼看看效果
time.sleep(3)
finally:
# 确保浏览器被关闭
driver.quit()
这个模板有几个好处:
- 用
try...finally确保quit()一定会被执行 - 加了
time.sleep(),方便你观察浏览器行为 - 打印页面标题,验证是否真的访问成功了
- 三行代码就能跑通第一个自动化脚本
- WebDriver 是浏览器和脚本之间的「遥控器」
- 每个
webdriver.Chrome()创建一个独立会话 - 永远记得调用
quit(),最好用try...finally包裹
5. 避坑指南
最后分享几个我踩过的坑:
- ChromeDriver 版本不匹配:Chrome 浏览器和 ChromeDriver 的版本必须对应。我曾经因为 Chrome 自动更新了,但 ChromeDriver 没更新,脚本直接报错。解决方案是去 ChromeDriver 官网 下载对应版本。
- 路径问题:如果 ChromeDriver 不在系统 PATH 里,你需要指定路径:
webdriver.Chrome(executable_path="你的路径")。不过新版本的 Selenium 已经支持自动下载驱动了,推荐使用。 - 浏览器被检测:有些网站会检测自动化工具。这时候可以加一些参数伪装成正常浏览器,比如去掉「Chrome 正受到自动测试软件的控制」的提示。这个后面会专门讲。
好了,第一个自动化脚本就到这里。你打开编辑器,敲一遍那三行代码,亲眼看看浏览器被操控的样子——相信我,那种感觉会上瘾的。