第一个自动化脚本:打开浏览器、访问网页、关闭浏览器

说实话,很多初学者第一次接触 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 默认会等待页面加载完成,这个机制叫「隐式等待」,后面我们会详细讲。

小技巧:如果你只想访问 HTTP 页面,可以省略 https://,但建议总是写完整 URL。我曾经因为少写了一个 s,在某个内网系统上折腾了半天——它强制跳转 HTTPS,结果脚本一直报错。

第三行:关闭浏览器

driver.quit()

这行代码关闭浏览器窗口,并结束 WebDriver 进程。注意,它和 driver.close() 不一样:

方法 作用 适用场景
quit() 关闭整个浏览器,结束所有窗口和进程 脚本执行完毕,彻底退出
close() 只关闭当前窗口 多窗口操作时,关闭其中一个
警告:我曾经在写一个长时间运行的监控脚本时,忘了调用 quit(),结果服务器上积累了上百个 chrome 进程,直接把内存吃满了。所以,一定要确保 quit() 被执行,哪怕脚本中途报错。

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 正受到自动测试软件的控制」的提示。这个后面会专门讲。

好了,第一个自动化脚本就到这里。你打开编辑器,敲一遍那三行代码,亲眼看看浏览器被操控的样子——相信我,那种感觉会上瘾的。