《Python实战进阶》No23: 使用 Selenium 自动化浏览器操作

ops/2025/3/16 6:20:58/

No23: 使用 Selenium 自动化浏览器操作


摘要

Selenium 是自动化浏览器操作的“瑞士军刀”,可模拟人类行为操作网页,适用于爬虫、测试、重复任务自动化等场景。本集通过代码驱动实战,从安装配置到复杂交互,带你掌握 Selenium 的核心技能,并结合电商网站登录、商品下单等真实场景,解决动态加载、反爬等实际问题。


在这里插入图片描述

核心概念与代码实战

1. 环境配置与 WebDriver 基础

安装命令

pip install selenium webdriver-manager  

初始化浏览器(自动管理驱动):

python">from selenium import webdriver  
from selenium.webdriver.chrome.service import Service  
from webdriver_manager.chrome import ChromeDriverManager  # 自动下载并配置 Chrome 驱动  
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))  

效果验证

python">driver.get("https://www.python.org")  
print(driver.title)  # 输出: "Welcome to Python.org"  

2. 元素定位与交互

常见定位方式

python"># 通过 ID 定位搜索框并输入关键词  
search_box = driver.find_element(By.ID, "id-search-field")  
search_box.send_keys("selenium")  # 通过 XPATH 点击搜索按钮  
driver.find_element(By.XPATH, "//button[@type='submit']").click()  

动态交互示例(鼠标悬停与下拉菜单选择):

python">from selenium.webdriver.common.action_chains import ActionChains  # 模拟鼠标悬停  
menu = driver.find_element(By.CSS_SELECTOR, ".menu-item")  
ActionChains(driver).move_to_element(menu).perform()  # 选择下拉菜单项  
driver.find_element(By.LINK_TEXT, "Documentation").click()  

3. 动态内容与显式等待

问题场景:页面数据通过 AJAX 动态加载,直接定位会报错。
解决方案:显式等待(Explicit Wait):

python">from selenium.webdriver.support.ui import WebDriverWait  
from selenium.webdriver.support import expected_conditions as EC  # 等待搜索结果加载完成  
results = WebDriverWait(driver, 10).until(  EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".list-recent-events li"))  
)  
print(f"共找到 {len(results)} 条结果")  

输出示例

共找到 5 条结果  

4. 反爬策略与绕过技巧

常见反爬手段与应对

python"># 修改 User-Agent  
options = webdriver.ChromeOptions()  
options.add_argument("user-agent=Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36")  # 使用代理 IP  
options.add_argument("--proxy-server=http://123.45.67.89:8080")  # 绕过 WebDriver 检测(部分网站会识别自动化脚本)  
options.add_argument("--disable-blink-features=AutomationControlled")  

验证码处理建议

  • 集成第三方 API(如 2Captcha)自动识别
  • 使用 Pytesseract 进行简单图像验证码识别

实战案例:电商自动化全流程

案例 1:自动化登录与数据抓取

场景:登录某电商后台,提取订单数据。

python">driver.get("https://fake-ecommerce.com/login")  # 输入账号密码  
driver.find_element(By.ID, "username").send_keys("user123")  
driver.find_element(By.ID, "password").send_keys("pass123")  
driver.find_element(By.CSS_SELECTOR, "button.login-btn").click()  # 抓取订单列表  
orders = WebDriverWait(driver, 10).until(  EC.presence_of_all_elements_located((By.CLASS_NAME, "order-item"))  
)  
for order in orders:  print(order.text)  

输出示例

订单号: 20230901-001 | 状态: 已发货  
订单号: 20230902-002 | 状态: 处理中  
案例 2:商品搜索与下单
python"># 搜索商品  
search_box = driver.find_element(By.NAME, "q")  
search_box.send_keys("无线耳机")  
search_box.submit()  # 选择第一个商品并加入购物车  
driver.find_element(By.CSS_SELECTOR, ".product-item:first-child .buy-btn").click()  
driver.find_element(By.ID, "checkout-btn").click()  # 提交订单(需提前登录)  
driver.find_element(By.ID, "place-order").click()  
案例 3:网页性能测试
python">import time  start_time = time.time()  
driver.get("https://example.com")  
load_time = time.time() - start_time  
print(f"页面加载耗时:{load_time:.2f} 秒")  # 统计资源请求时间(需启用性能日志)  
logs = driver.get_log("performance")  
for log in logs:  if "Network.responseReceived" in log["message"]:  print(f"资源加载时间:{log['timestamp']}")  

输出示例

页面加载耗时:2.35 秒  
资源加载时间:1693720000.123  

扩展思考

1. Headless 模式提升效率
python">options = webdriver.ChromeOptions()  
options.add_argument("--headless")  # 无头模式  
options.add_argument("--disable-gpu")  
driver = webdriver.Chrome(options=options)  # 在后台静默执行任务  
driver.get("https://example.com")  
print(driver.title)  

优势:节省内存、适合服务器环境

2. Selenium 的局限性
  • 性能开销大:每个实例占用 1GB+ 内存
  • 无法操作非浏览器 GUI:如桌面应用需结合 PyAutoGUI(下集详解)

替代方案推荐

  • Playwright:微软开源,支持移动端模拟和更快的执行速度
  • Requests + lxml:轻量级静态页面爬取

总结

通过本集实战,你已掌握:

  1. Selenium 动态页面操作的核心技能
  2. 反爬策略的攻防实战
  3. 电商自动化全流程(登录→搜索→下单→性能测试)
  4. 性能优化与替代方案选择

下集预告
《No24: PyAutoGUI 实现桌面自动化》将带你突破浏览器限制,自动化操作文件管理器、Excel 等桌面应用,实现全栈自动化


附:运行环境

  • 环境要求:Python 3.8+、Chrome 114+

http://www.ppmy.cn/ops/166140.html

相关文章

【量化策略】双均线交叉策略

【量化策略】双均线交叉策略 🚀量化软件开通 🚀量化实战教程 技术背景与应用场景 双均线交叉策略是一种基于移动平均线的经典量化交易策略,广泛应用于股票、期货、外汇等金融市场。该策略通过计算短期和长期两条移动平均线的交叉点来生成…

软考网络安全专业

随着信息技术的迅猛发展,网络安全问题日益凸显,成为社会各界普遍关注的焦点。在这样的背景下,软考网络安全专业应运而生,为培养高素质的网络安全人才提供了有力支撑。本文将对软考网络安全专业进行深入剖析,探讨其在信…

C语言网络安全框架

坚决归零。。。 C语言应注意的基本编程规范: 1,文件名用小写字母、下划线、数字的组合命名,不可出现空格等其他字符,更不允许出现汉字、日语、俄语等 ASCII码字符。 2,每个.c文件都要对应一个.h文件来配合其对外资源声…

设计模式--单例模式(Singleton)【Go】

引言 在设计模式中,单例模式(Singleton Pattern)是一种非常常见且实用的模式。它的核心思想是确保一个类只有一个实例,并提供一个全局访问点。这种模式在需要全局唯一对象的场景中非常有用,比如配置管理、日志记录、数…

MySQL开发陷阱与最佳实践:第1章:MySQL开发基础概述-1.2 MySQL开发环境搭建

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 第1章:MySQL开发基础概述1.2 MySQL开发环境搭建1.2.1 MySQL环境搭建方式对比与选型1.2.2 Windows环境搭建步骤详解1.2.2.1 官方安装包部署(以MySQL 8…

三分钟掌握视频剪辑 | 在 Rust 中优雅地集成 FFmpeg

前言 在当今的短视频时代,高效的视频剪辑已成为内容创作者和开发者的迫切需求。无论是裁剪视频开头结尾、提取高光时刻,还是制作 GIF、去除广告,剪辑都是必不可少的一环。 然而,批量处理大量视频并非易事,常见的挑战…

MD5、SHA、HMAC 加密算法及其在网页逆向分析中的应用

一、引言​ 在当今数字化时代,数据的价值愈发凸显,同时数据的安全与完整性保护也面临着严峻挑战。加密算法作为保障数据安全的基石,广泛应用于各个领域,从网络通信到数据存储,无处不在。MD5、SHA 和 HMAC 加密算法因其独特的特性和优势,成为了加密领域的重要成员。另一方…

Python的那些事第四十五篇:继承自Nose的测试框架Nose2

Nose2:继承自Nose的测试框架 摘要 本文深入探讨了Nose2这一继承自Nose的测试框架。在软件开发过程中,测试是确保代码质量和稳定性的重要环节,而测试框架为测试工作的开展提供了有力支持。Nose2作为Nose的继承者,在保留Nose优势的基础上进行了诸多改进和扩展,为Python测试…