Selenium实战:华为商城抢货工具源码解析与二次开发指南 简介这是一份基于Selenium的华为商城抢货工具项目源码面向计算机相关专业的在校学生、教师及企业开发者可用于毕业设计、课程设计、作业或项目立项演示也适合具备一定Python基础的小白进阶学习。资源包共22个文件约4.63MB以js、json、yml等配置与脚本文件为主辅以txt授权说明、md文档及chromedriver.exe驱动整体结构清晰涵盖app、controller、service、view、extend、router等模块便于按目录快速定位核心逻辑。项目已通过测试运行功能完整并附有详细文档读者可从中掌握Selenium自动化操作、页面元素定位、抢购流程控制与异常处理等关键思路也可在现有代码基础上修改扩展实现其他自动化功能。目前已有60人学习关注适合需要实战参考或二次开发的学习者下载交流。1. 从一份 95 分课设说起Selenium 驱动华为商城抢货工具到底能跑通什么如果你正在找一份能直接跑起来、结构完整、还带详细文档的 Selenium 实战项目这份基于 Selenium 的华为商城抢货工具源码包大概率能满足你的预期。它不是那种只丢几个 py 文件、跑起来一堆报错的“半成品”而是一个带 controller、service、view 分层、有 router.js 路由配置、有 config 目录、还配了 chromedriver.exe 的完整工程。答辩评审 95 分这个信息本身就说明它的代码组织、文档完整度和功能闭环是经得起看的。它解决的核心问题很具体用 Selenium 模拟真实浏览器行为在华为商城商品页面完成登录、监控、下单这一套流程的自动化。适合三类人——计算机相关专业要做课设或毕设的学生、想学 Selenium 实战但不想从零搭框架的开发者、以及需要一份可修改基线代码来做二次开发的人。下面我按“这东西怎么跑起来 → 关键模块怎么改 → 哪里容易翻车”的顺序拆一遍你照着走基本能复现。2. 环境搭建与首次运行把 chromedriver 和依赖版本对齐2.1 为什么 chromedriver 版本是第一个拦路虎Selenium 控制浏览器的原理是通过 WebDriver 协议和浏览器驱动通信chromedriver.exe 就是 Chrome 和你的 Python 代码之间的翻译官。翻译官和浏览器版本对不上直接报SessionNotCreatedException这是新手翻车率最高的一步。源码包里自带的 chromedriver.exe 是打包时的版本你本机 Chrome 大概率已经自动升级了所以第一步不是急着pip install而是先确认版本匹配。常见做法是打开 Chrome地址栏输入chrome://version看第一行的版本号。然后去 chromedriver 的版本对照表找对应大版本号的驱动。比如 Chrome 是 120.x就下 120.x 的 chromedriver。源码包里的驱动如果版本旧了直接替换掉根目录那个 exe 就行代码里一般是用相对路径引用的。2.2 依赖安装与配置文件解读这个项目是 Node.js 和 Python 混合的结构从文件清单能看到 package.json、router.js、controller、service 这些是 Node 侧的 Web 服务层而 Selenium 抢货逻辑通常在 Python 脚本里。先看 package.json 里的依赖再处理 Python 环境。# 先装 Node 侧依赖package.json 在根目录 npm install # Python 侧核心依赖版本不要追新selenium 4.x 和 3.x API 有差异 pip install selenium4.15.0 pip install requests pip install beautifulsoup4装完依赖后看 config 目录config.default.js是默认配置模板。里面通常会有端口号、数据库连接、以及抢货相关的参数比如目标商品 URL、轮询间隔、下单超时时间。我一般会复制一份改成config.local.js避免改坏默认配置。plugin.js是插件注册入口如果项目用了 egg.js 框架这里会挂载中间件。提示如果 npm install 卡在某个包上先检查 node 版本。egg.js 系项目对 node 版本有要求建议用 node 16 或 18别用最新的 22容易出兼容问题。2.3 启动顺序与首次运行验证启动顺序错了会出现“服务起来了但抢货脚本连不上”的情况。正确顺序是先起 Node 服务再跑 Python 脚本。# 第一步启动 Node 服务默认端口看 config.default.js npm run dev # 第二步另开终端运行 Selenium 主脚本 python app/controller/main.py跑起来后观察两件事一是 Chrome 窗口是否自动弹出并跳转到华为商城登录页二是终端有没有打印轮询日志。如果 Chrome 没弹出来八成是 chromedriver 路径不对或者版本不匹配如果弹出来了但卡在登录页不动检查 config 里的账号密码字段是否填了。首次运行建议把轮询间隔调大比如 5 秒一次方便观察每一步行为确认流程通了再改回 1 秒以内。3. 核心模块拆解登录、监控、下单三段逻辑怎么改3.1 登录模块cookie 复用比模拟输入更稳登录是抢货工具的第一道坎。华为商城的登录有滑块验证和短信验证码纯模拟输入账号密码很容易触发风控。这个项目里登录模块的常见做法是首次手动登录后保存 cookie后续请求直接带 cookie 绕过登录页。# app/service/login.py 核心逻辑示意 import pickle from selenium import webdriver def save_cookies(driver, pathcookies.pkl): # 手动登录完成后调用把当前会话 cookie 序列化到本地 with open(path, wb) as f: pickle.dump(driver.get_cookies(), f) def load_cookies(driver, pathcookies.pkl): # 下次启动时先访问目标域名再注入 cookie driver.get(https://www.vmall.com) with open(path, rb) as f: cookies pickle.load(f) for cookie in cookies: # 部分 cookie 有 domain 限制注入前要清理 if domain in cookie: cookie.pop(domain) driver.add_cookie(cookie) driver.refresh()逻辑说明save_cookies在手动登录成功后执行一次把 cookie 存到本地 pkl 文件。load_cookies在每次启动时调用先访问域名让浏览器建立会话上下文再逐条注入 cookie。参数上注意cookie.pop(domain)这步Selenium 注入带 domain 的 cookie 时经常报InvalidCookieDomainException去掉 domain 字段能绕过。cookie 有效期一般几天到两周过期了重新手动登录一次就行。3.2 商品监控轮询频率与页面元素定位的平衡监控模块的核心是“多久查一次”和“查什么元素”。查太频繁容易被限流查太慢抢不到。项目里一般用WebDriverWait配合expected_conditions做显式等待比time.sleep精准。from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC def check_stock(driver, item_url, timeout3): driver.get(item_url) try: # 等待“立即购买”按钮出现出现即代表有货 buy_btn WebDriverWait(driver, timeout).until( EC.element_to_be_clickable((By.CSS_SELECTOR, .buy-btn)) ) return buy_btn except Exception: # 超时说明按钮没出现大概率无货 return None参数说明timeout3是单次页面等待上限设太大会拖慢轮询节奏设太小会误判。By.CSS_SELECTOR里的.buy-btn是示例选择器实际要按华为商城当前页面的 DOM 结构改。我一般会先用 F12 找到“立即购买”按钮的 class 或 id再填进来。轮询间隔建议 0.5 到 1 秒低于 0.5 秒容易触发频控高于 2 秒基本抢不到热门商品。3.3 下单模块从点击到提交的时序控制下单模块最容易出的问题是“按钮点到了但订单没提交”。原因是页面有异步加载点击后需要等确认弹窗或支付页出现不能点完就完事。def place_order(driver, buy_btn): buy_btn.click() try: # 等待确认订单按钮出现最多等 5 秒 confirm_btn WebDriverWait(driver, 5).until( EC.element_to_be_clickable((By.CSS_SELECTOR, .confirm-order)) ) confirm_btn.click() # 提交后等支付页跳转出现即视为下单成功 WebDriverWait(driver, 5).until( EC.url_contains(pay) ) return True except Exception as e: print(f下单失败: {e}) return False逻辑说明点击购买后必须等确认按钮可点击再点点完再等 URL 跳转到支付页才算成功。参数上5秒是每个环节的等待上限网络慢可以适当加到 8 秒。如果卡在确认按钮一直不出现检查是不是收货地址没设默认华为商城下单前会校验地址信息。4. 避坑与排查五个真实翻车记录4.1 现象Chrome 启动后立刻闪退报WebDriverException原因chromedriver 版本和 Chrome 不匹配或者 chromedriver.exe 没有执行权限。解决先核对版本号Linux 或 Mac 下还要chmod x chromedriver。Windows 下检查杀毒软件有没有把 exe 隔离了。4.2 现象登录后 cookie 注入成功但页面还是未登录状态原因cookie 注入前没有先访问目标域名浏览器没有建立对应的会话上下文。解决driver.get(https://www.vmall.com)这步不能省而且要在注入 cookie 后driver.refresh()刷新一次。4.3 现象轮询几十次后被封 IP 或弹出验证码原因请求频率过高触发风控。解决把轮询间隔从 0.5 秒调到 1.5 秒以上并在每次driver.get之间加随机延迟。常见做法是time.sleep(random.uniform(0.8, 1.5))模拟人工操作节奏。4.4 现象element click intercepted报错按钮点不到原因页面上有弹窗、浮层或广告遮挡了目标按钮。解决点击前先执行driver.execute_script(arguments[0].scrollIntoView();, btn)把按钮滚到可视区域或者用 JS 直接触发点击driver.execute_script(arguments[0].click();, btn)。4.5 现象下单成功但没付款订单超时取消原因脚本只做到提交订单没处理支付环节。解决这个项目定位是抢货工具支付环节通常需要手动完成。如果想自动化支付得额外对接支付接口但涉及资金安全不建议在课设项目里做。5. 二次开发与验证把抢货逻辑迁移到其他商城的技巧这份源码的价值不只在“抢华为”更在于它提供了一套可复用的 Selenium 工程结构。controller 层负责调度service 层封装业务逻辑view 层处理页面交互router.js 管路由。你想迁移到其他商城改的主要是 service 层里的元素选择器和 URL 配置controller 和 view 基本不用动。验证迁移是否成功我一般用“三步验证法”。第一步把目标商城的商品页 URL 填进 config跑一次看 Chrome 能不能正常打开页面。第二步用 F12 找到“加入购物车”或“立即购买”按钮的选择器替换掉 service 里的 CSS 选择器再跑一次看能不能点到。第三步把轮询间隔调到 3 秒观察 10 次轮询内有没有误报或漏报。三步都过了再改回正常频率。验证项检查内容通过标准页面加载Chrome 能否打开目标 URL页面标题正确无 404元素定位购买按钮选择器是否命中按钮可点击无异常抛出轮询稳定性连续 10 次轮询结果有货/无货判断与实际一致还有一个容易忽略的点chromedriver.exe 在 Windows 下能用但如果你换到 Mac 或 Linux 做开发得换成对应平台的驱动代码里webdriver.Chrome()的初始化方式也要调整。我一般会在 config 里加一个platform字段根据系统自动选驱动路径这样跨平台迁移不用改业务代码。从那以后我每次拿到这类 Selenium 项目都强制先跑一遍版本对齐检查再动业务代码。希望帮到你。本文还有配套的精品资源点击获取