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

devtools/2025/3/18 15:06:50/

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/devtools/168086.html

相关文章

市场监管总局升级12315平台 专项整治四大市场顽疾保障消费安全

大湾区经济网湾区财经讯,在今天下午举行的国务院新闻办新闻发布会上,市场监管总局负责人表示,将开展食品非法添加、假冒伪劣、价格欺诈、虚假宣传四大领域专项整治行动,并强化缺陷产品召回监管,全面保障消费者“安全消…

【MySQL】多表查询(笛卡尔积现象,联合查询、内连接、左外连接、右外连接、子查询)-通过练习快速掌握法

在DQL的基础查询中,我们已经学过了多表查询的一种:联合查询(union)。本文我们将系统的讲解多表查询。 笛卡尔积现象 首先,我们想要查询emp表和stu表两个表,按照我们之前的知识栈,我们直接使用…

行为模式---访问者模式

概念 访问者模式是设计模式行为模式的一种,主要是用于将算法和所作用的对象隔离开来。 访问者模式通过将算法封装在访问者对象中,使得算法可以独立于对象结构变化。对象结构中的每个元素都接受访问者对象,并将自身传递给访问者对象&#xf…

一般机器学习有哪些算法?

传统的机器学习算法主要依赖统计学和优化方法,不依赖深层神经网络,通常具有较高的可解释性且适用于中小规模数据集。以下是经典的传统机器学习算法分类及代表性模型: 一、监督学习(Supervised Learning) 1. 回归&…

Muon: An optimizer for hidden layers in neural networks

引言 在深度学习领域,优化算法对模型训练效率和性能起着关键作用。从经典的随机梯度下降 (SGD) 及其动量法,到自适应优化方法 Adam/AdamW 等,一系列优化器大大加速了神经网络的收敛。然而,随着模型规模和数据量的爆炸式增长&…

第一节:关于数组的算法(python版)

目录 一、存储方式 二、二分查找 三:数组的算法操作:双指针算法 四、数组操作:滑动窗口 视频讲解地址:动态-哔哩哔哩 一、存储方式 在python中的list本质是动态数组,支持自动扩容。还有一个numpy数组,…

京东Taro小程序原生端接入操作

首先对接之前先看文档,看是需要接入mPass平台,还是仅限在原生端接入Taro小程序; 本文章是仅限接入Taro小程序,接下来废话不多少,我们开始新的接入流程: 首先将这几个文件导入到当前项目中: 还…

iOS OC匹配多个文字修改颜色和字号

1、传入字符串数组&#xff0c;通过NSMutableAttributedString修改匹配文字 可以根据需要搞成匹配单个字符串 - (NSAttributedString *)applyFontSizeToText:(NSString *)text matchStrings:(NSArray<NSString *> *)matchStrings {NSMutableAttributedString *attribut…