当前位置:首页>python>Python+Selenium 模拟浏览器操作完全指南

Python+Selenium 模拟浏览器操作完全指南

  • 2026-08-20 05:22:02
Python+Selenium 模拟浏览器操作完全指南

Python自学手册

一、概述

Selenium 是一款强大的Web应用自动化测试工具,支持多种浏览器(ChromeFirefoxEdge等)和多种编程语言(PythonJavaC#等)。结合Python语言,Selenium可轻松实现模拟浏览器的各类操作,如打开网页、元素定位、输入文本、点击按钮、页面切换等,广泛应用于自动化测试、数据爬取、网页自动化操作等场景。

本文将详细介绍Python+Selenium的环境搭建流程,核心操作API的使用方法,并通过实战案例帮助读者快速上手。

二、环境准备

2.1 安装Python

1. 前往Python官方网站(https://www.python.org/)下载对应系统(Windows/macOS/Linux)的最新版本安装包;

2. 安装过程中注意勾选“Add Python to PATH”Windows),macOS/Linux可通过命令行验证安装:python --versionpython3 --version,若显示版本号则安装成功。

2.2 安装Selenium

打开命令行终端,执行以下命令安装Selenium

pythonpip install selenium # Windows系统pip3 install selenium # macOS/Linux系统

安装完成后,可通过Python交互式环境验证:输入 import selenium,若未报错则说明库安装成功。

2.3 下载浏览器驱动

Selenium通过浏览器驱动与浏览器进行交互,需下载与本地浏览器版本匹配的驱动程序:

1.查看浏览器版本

Chrome:打开浏览器 → 点击右上角三个点 → 帮助 → 关于Google Chrome,查看版本号(如120.0.6099.109);

Edge:打开浏览器 → 点击右上角三个点 → 帮助和反馈 → 关于Microsoft Edge,查看版本号。

2.下载对应驱动

Chrome驱动:https://sites.google.com/chromium.org/driver/(国内可访问镜像站:https://npm.taobao.org/mirrors/chromedriver/);

Edge驱动:https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/

3.配置驱动

Windows:将下载的驱动压缩包解压,得到.exe文件(如chromedriver.exe),可放置在Python安装目录下(或任意目录,需在代码中指定驱动路径);

macOS/Linux:解压后得到驱动文件,放置在/usr/local/bin目录下(或指定路径),并赋予执行权限:chmod +x chromedriver

三、核心操作API

3.1 初始化浏览器

首先导入selenium.webdriver模块,通过对应浏览器的驱动类初始化浏览器实例:

pythonfrom selenium import webdriverfrom selenium.webdriver.chrome.service import Service # Chrome驱动服务类(Selenium4+推荐)# 方式1:驱动已配置在环境变量中driver = webdriver.Chrome()# 方式2:指定驱动路径(推荐,避免环境变量配置问题)service = Service(r"C:\chromedriver.exe") # Windows路径# service = Service("/usr/local/bin/chromedriver") # macOS/Linux路径driver = webdriver.Chrome(service=service)

执行上述代码后,会自动打开一个空白的Chrome浏览器窗口。

3.2 打开网页

使用get(url)方法打开指定网页:

pythondriver.get("https://www.baidu.com") # 打开百度首页

3.3 元素定位(核心)

Selenium操作网页元素的前提是准确定位元素,常用的定位方式及对应API如下:

定位方式

API方法

适用场景

示例

ID定位

find_element(By.ID, "id")

元素有唯一ID属性(推荐)

find_element(By.ID, "kw") 定位百度搜索框

Name定位

find_element(By.NAME, "name")

元素有name属性

find_element(By.NAME, "wd") 定位百度搜索框

Class Name定位

find_element(By.CLASS_NAME, "class")

元素有class属性(注意多class值需取唯一部分)

find_element(By.CLASS_NAME, "s_ipt") 定位百度搜索框

Tag Name定位

find_element(By.TAG_NAME, "标签名")

定位同类标签中唯一的元素(如<input>

find_element(By.TAG_NAME, "input")

Link Text定位

find_element(By.LINK_TEXT, "链接文本")

定位超链接(<a>标签),需完全匹配文本

find_element(By.LINK_TEXT, "新闻") 定位百度新闻链接

Partial Link Text定位

find_element(By.PARTIAL_LINK_TEXT, "部分文本")

定位超链接,模糊匹配文本

find_element(By.PARTIAL_LINK_TEXT, "") 匹配新闻”“新鲜事

XPath定位

find_element(By.XPATH, "XPath表达式")

万能定位方式,适用于复杂场景

find_element(By.XPATH, '//*[@id="kw"]') 定位百度搜索框

CSS Selector定位

find_element(By.CSS_SELECTOR, "CSS选择器")

定位效率高,语法简洁

find_element(By.CSS_SELECTOR, "#kw") 定位百度搜索框

注意:

定位单个元素用find_element(),定位多个元素用find_elements()(返回元素列表);

使用前需导入from selenium.webdriver.common.by import By

3.4 元素交互操作

定位到元素后,可执行输入、点击、清空等操作:

pythonfrom selenium.webdriver.common.by import By# 1. 输入文本:send_keys(text)search_box = driver.find_element(By.ID, "kw")search_box.send_keys("Python Selenium") # 向百度搜索框输入文本# 2. 点击元素:click()search_btn = driver.find_element(By.ID, "su")search_btn.click() # 点击百度搜索按钮# 3. 清空文本:clear()search_box.clear() # 清空搜索框内容# 4. 提交表单:submit()(适用于<form>标签内的元素)search_box.send_keys("Python")search_box.submit() # 等效于点击搜索按钮

3.5 浏览器控制操作

python# 1. 最大化窗口driver.maximize_window()# 2. 最小化窗口driver.minimize_window()# 3. 设置窗口大小(宽,高)driver.set_window_size(1920, 1080)# 4. 前进、后退、刷新driver.get("https://www.baidu.com")driver.get("https://www.taobao.com")driver.back() # 后退到百度driver.forward() # 前进到淘宝driver.refresh() # 刷新当前页面# 5. 获取当前页面URL和标题print("当前URL:", driver.current_url)print("当前标题:", driver.title)# 6. 关闭浏览器driver.close() # 关闭当前窗口(若只有一个窗口则关闭浏览器)driver.quit() # 关闭所有窗口,终止驱动进程(推荐使用)

3.6 等待机制(解决元素加载问题)

网页加载是异步过程,若代码执行速度快于元素加载速度,会导致定位失败。Selenium提供三种等待机制:

3.6.1 强制等待(sleep

固定等待时间,无论元素是否加载完成,均等待指定时间后再执行后续代码(简单但不灵活):

pythonimport timedriver.get("https://www.baidu.com")time.sleep(2) # 强制等待2秒search_box = driver.find_element(By.ID, "kw")

3.6.2 隐式等待(implicitly_wait

设置全局等待时间,在指定时间内不断查找元素,找到则立即执行后续代码,超时未找到则报错(适用于整个驱动生命周期):

pythondriver = webdriver.Chrome(service=service)driver.implicitly_wait(10) # 隐式等待10秒driver.get("https://www.baidu.com")search_box = driver.find_element(By.ID, "kw") # 10秒内找到则执行,否则报错

3.6.3 显式等待(WebDriverWait

针对性等待某个条件满足(如元素可点击、可见),超时则报错(灵活,推荐用于复杂场景):

pythonfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECdriver.get("https://www.baidu.com")# 等待10秒,直到元素可点击wait = WebDriverWait(driver, 10)search_box = wait.until(EC.element_to_be_clickable((By.ID, "kw")) # 条件:元素可点击)search_box.send_keys("Python Selenium")

常用条件(expected_conditions):

element_to_be_clickable:元素可点击;

presence_of_element_located:元素存在于DOM树;

visibility_of_element_located:元素可见(显示在页面上);

text_to_be_present_in_element:元素包含指定文本。

四、实战案例:模拟百度搜索

以下案例实现完整的百度搜索流程:打开百度→ 输入关键词 → 点击搜索 → 等待结果加载 → 关闭浏览器。

pythonfrom selenium import webdriverfrom selenium.webdriver.chrome.service import Servicefrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as EC# 1. 初始化浏览器service = Service(r"C:\chromedriver.exe") # 替换为你的驱动路径driver = webdriver.Chrome(service=service)driver.implicitly_wait(5) # 全局隐式等待5秒driver.maximize_window() # 最大化窗口try:# 2. 打开百度首页driver.get("https://www.baidu.com")# 3. 定位搜索框,输入关键词search_box = WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.ID, "kw")))search_box.send_keys("Python Selenium 教程")# 4. 定位搜索按钮,点击search_btn = driver.find_element(By.ID, "su")search_btn.click()# 5. 等待搜索结果加载,验证结果WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//div[@id="content_left"]')))print("搜索成功,当前页面标题:", driver.title)except Exception as e:print("操作失败:", str(e))finally:# 6. 关闭浏览器driver.quit()

五、常见问题与解决方案

5.1 驱动版本不匹配

问题现象:运行代码时提示“session not created: This version of ChromeDriver only supports Chrome version XX”

解决方案:下载与当前浏览器版本一致的驱动,可在驱动下载页面查看版本对应关系。

5.2 元素定位失败

问题现象:提示“NoSuchElementException”

解决方案:

检查定位表达式是否正确(可通过浏览器开发者工具验证:F12 → 元素 → Ctrl+F,输入定位表达式);

添加等待机制(隐式等待或显式等待),确保元素加载完成;

若元素在iframe中,需先切换到iframedriver.switch_to.frame("iframe_id")

5.3 浏览器自动关闭

问题现象:代码执行完成后浏览器立即关闭。

解决方案:

检查是否误写driver.quit()(放在finally块中会在代码执行完后关闭,若需保留浏览器可注释);

Selenium4+版本中,若使用默认驱动服务,可能会自动终止进程,可通过指定service参数并设置keep_alive=True解决。

5.4 反爬机制拦截

问题现象:模拟操作时被网站识别为爬虫,无法正常访问。

解决方案:

添加请求头(如User-Agent):options = webdriver.ChromeOptions(); options.add_argument("user-agent=Mozilla/5.0..."); driver = webdriver.Chrome(options=options)

禁用浏览器自动化特征:options.add_experimental_option("excludeSwitches", ["enable-automation"])

添加随机等待时间,模拟人工操作节奏。

六、总结

Python+Selenium实现模拟浏览器操作的核心流程为:环境搭建 → 初始化浏览器 → 打开网页 → 元素定位 → 交互操作 → 浏览器控制。其中,元素定位和等待机制是关键知识点,需根据实际场景灵活选择定位方式和等待策略。

通过本文的基础讲解和实战案例,读者可快速上手简单的浏览器自动化操作。如需实现更复杂的场景(如登录验证、下拉框选择、文件上传、多窗口切换等),可进一步学习Selenium的高级API用法。

最新文章

随机文章