Python Web自动化入门:Selenium实战与合规指南
发布时间:2026/9/4 8:14:29 锦皓数字建站

先把一个重要的观点放在最前面网上流传的“100% 自动抢票脚本”“大麦猫眼通杀、无脑原价购票”这类内容绝大多数是标题党甚至暗藏风险。真正的票务平台都有人机验证、频控、设备指纹、订单风控等多层检测任何声称“成功率 100%”的脚本都经不起推敲更重要的是未经平台授权编写和运行抢票脚本可能违反平台协议严重时还可能涉及法律风险。本文不教大家绕过验证码、伪造请求或破解风控而是从这个热点话题出发梳理 Python 自动化测试与 Web 自动化的完整入门路径。读完这篇文章你能掌握环境搭建、元素定位、定时触发、异常处理等核心技能并把它用在合规的自动化测试、日常办公提效等场景中而不是用来和平台的风控体系“硬碰硬”。1. 背景与核心概念1.1 先理解 Web 自动化的本质Web 自动化简单说就是让程序代替人工去操作浏览器打开网页、输入文本、点击按钮、读取页面数据。它最初是软件测试领域的重要手段后来也被大量应用在爬虫、RPA机器人流程自动化、日常办公脚本中。很多人会把它和“抢票外挂”画等号这是一个误解。成熟的 Web 自动化工具例如 Selenium、Playwright、Puppeteer本质上是浏览器厂商和测试社区推动的标准技术方案。它们的作用是驱动真实的浏览器内核执行操作模拟用户的点击、输入、滚动等行为。测试工程师用它们编写回归测试用例运维工程师用它们完成自动巡检产品经理用它们做页面流程验收——这些都是合规且高效的使用方式。抢票脚本之所以被视为灰色地带是因为它把自动化技术用在了平台明令禁止的场景绕过真人校验、高频重复提交、抢占稀缺资源。平台方会把它识别为异常流量轻则验证码升级重则封禁账号甚至拉黑设备。所以大家学习自动化技术应该聚焦在“如何写好自动化代码”本身而不是研究怎么去对抗风控系统。1.2 Selenium、Playwright 和 PyAutoGUI 有什么区别很多人第一次接触自动化项目时会搞不清楚工具选型。这里做一个简单对比工具核心思路优点典型场景Selenium调用 WebDriver 驱动浏览器生态成熟、文档多、兼容老项目Web UI 自动化测试Playwright通过 CDP 协议直接控制浏览器速度快、API 简洁、支持多浏览器现代 Web 自动化与测试PyAutoGUI模拟键盘和鼠标在屏幕上的操作不用依赖浏览器驱动桌面软件自动化、简单重复操作requests/httpx直接发送 HTTP 请求速度快、资源占用小接口测试、数据采集这套对比说明一个道理没有“哪个一定最好”关键看你的场景。如果目标是学习 Web 自动化测试从 Selenium 入手更容易理解元素定位和浏览器驱动。如果追求工程效率和跨浏览器兼容可以考虑 Playwright。如果要控制桌面端软件那就只能走 PyAutoGUI 这类系统级方案。1.3 为什么“成功率 100%”是不现实的从技术角度拆解一次购票请求流程通常是用户登录账号 - 进入详情页 - 点击“立即购买” - 提交订单 - 确认支付。任何一个环节都可能出现波动。网络延迟从你的电脑发出请求到服务器返回响应中间有物理距离和网络抖动快慢不可控。库存竞争同一时刻有大量用户在抢系统处理请求的顺序取决于后端队列和分布式锁策略。验证机制滑块、点选文字、短信验证码等都需要真人参与自动化很难稳定通过。账号状态风控系统会记录账号的 IP、设备、行为轨迹异常操作会直接拦截订单。平台反爬升级前端 JS 加密参数、接口签名、请求频率监控等手段让静态脚本很容易失效。所以所谓的“成功率 100%”在技术上就不成立。如果有人向你售卖这类脚本反而要警惕它可能捆绑木马、盗号程序或者需要你提供账号密码。设置账号密码保护好自己的隐私比抢到一张票重要得多。2. 环境准备与版本说明下面进入动手环节。我们使用 Python Selenium 来搭建一个合规的 Web 自动化学习环境。无论你是刚接触 Python 的小白还是有一定测试经验的开发者这一步都很重要。2.1 Python 环境安装这里以 Windows 环境为例给出说明macOS 和 Linux 的思路类似。请先到 Python 官网下载安装包。安装时务必勾选“Add Python to PATH”否则后续在命令行中输入python会提示无法识别。安装完成后打开命令行工具输入python --version如果能看到类似Python 3.12.x的输出版本信息说明 Python 安装成功。为了隔离不同项目的依赖建议创建虚拟环境python -m venv venvWindows 下激活虚拟环境venv\Scripts\activatemacOS/Linux 下激活虚拟环境source venv/bin/activate激活后命令行前面会出现(venv)前缀后续安装的依赖都会放在这个虚拟环境里不会污染全局 Python。2.2 安装 Selenium在激活的虚拟环境中执行pip install selenium如果你想使用较新的 Playwright可以执行pip install playwright其中 Selenium 需要浏览器驱动。这里需要解释一下Selenium 本身只是一个客户端库它必须通过 WebDriver 与浏览器通信。不同版本的浏览器需要对应的驱动版本否则启动时会报会话创建失败。如果你使用的是 Chrome 浏览器推荐通过 Selenium Manager 自动管理驱动。Selenium 4.6 以上版本内置了 Selenium Manager当你指定使用 Chrome 时它会自动寻找并下载匹配的 ChromeDriver不需要手动配置环境变量。这是一个非常实用的改进可以帮你省掉不少环境问题。2.3 检查基础环境是否可用编写一个最小脚本确认环境没有问题# 文件路径selenium_basic_check.py from selenium import webdriver driver webdriver.Chrome() driver.get(https://www.baidu.com) print(页面标题:, driver.title) driver.quit()如果运行后能正常打印出“百度”之类的标题说明环境搭建成功。如果你看到WebDriverException或SessionNotCreatedException大概率是浏览器版本和驱动版本不匹配升级 Selenium、升级浏览器或者查看驱动日志即可。3. 核心语法与自动化原理拆解写好自动化脚本不是把 find_element 和 click 这些方法背熟就行。你需要理解页面结构、元素定位策略以及同步等待机制。这一节我们先把最常用的核心知识点串起来。3.1 页面元素定位网页本质上是一棵 DOM 树每个按钮、输入框、标题都是 DOM 树上的节点。Selenium 提供了多种定位方式常见的有下面这些。from selenium import webdriver from selenium.webdriver.common.by import By driver webdriver.Chrome() # 通过 id 定位 driver.find_element(By.ID, username) # 通过 class 属性定位 driver.find_element(By.CLASS_NAME, btn-primary) # 通过 name 属性定位 driver.find_element(By.NAME, password) # 通过标签名定位 driver.find_element(By.TAG_NAME, button) # 通过 XPath 定位 driver.find_element(By.XPATH, //button[typesubmit]) driver.quit()对于初学者来说XPath 和 CSS Selector 是最需要掌握的两个能力。XPath 可以处理复杂的层级关系例如定位某个按钮的父元素下的兄弟元素CSS Selector 语法更简洁在性能上通常也更好。建议优先尝试 id、class、name 等简单属性找不到时再用 XPath。这里特别提醒很多网页的 class 属性包含动态变化的值例如btn btn-123abc如果直接把整个 class 写进定位表达式下次页面更新后脚本就失效了。尽量使用稳定的业务属性例如id、name、>from selenium import webdriver from selenium.webdriver.common.by import By driver webdriver.Chrome() buttons driver.find_elements(By.CLASS_NAME, confirm-btn) if buttons: buttons[0].click() else: print(没有找到确认按钮页面可能已经跳转)3.3 等待机制隐式等待与显式等待网页加载是异步完成的。如果你在按钮还没有渲染完成时立刻去点击自然会报错。新手最常见的做法是直接调用time.sleep(5)虽然简单粗暴但效率低而且一旦网络变慢依然可能失败。更专业的做法是显式等待程序会在指定时间内反复尝试某个条件直到条件满足或超时。from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC driver webdriver.Chrome() wait WebDriverWait(driver, 10) element wait.until( EC.element_to_be_clickable((By.ID, submit-btn)) ) element.click()上面的代码会在 10 秒内反复确认按钮是否可点击一旦可点击立即执行操作避免固定 sleep 造成的长时间空等。隐式等待则是在整个 WebDriver 会话周期内生效的全局等待driver webdriver.Chrome() driver.implicitly_wait(10)它的作用是每次查找元素时如果元素没有立刻出现会在超时之前持续轮询。两者可以搭配使用但要注意隐式等待和显式等待同时使用时整体等待时间可能叠加增加排查难度。这里建议从显式等待入手它更可控也更容易写出稳定脚本。3.4 常用交互操作找到元素之后常见的操作包括from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys driver webdriver.Chrome() # 定位到输入框 input_box driver.find_element(By.ID, search-keyword) # 清空已有内容并输入文字 input_box.clear() input_box.send_keys(Python 自动化测试) # 模拟键盘回车 input_box.send_keys(Keys.ENTER) # 定位到按钮并点击 submit driver.find_element(By.XPATH, //button[contains(text(),搜索)]) submit.click() driver.quit()需要注意的是click()方法要求元素可以被点击。如果元素被其他弹层遮住或者处于不可见状态Selenium 会报ElementClickInterceptedException。这个时候可以从两个方向排查一是等弹层关闭二是等待元素状态变为可交互。3.5 浏览器窗口与标签页处理自动化过程中经常涉及新窗口或新标签页。切换句柄是必须掌握的技能。from selenium import webdriver driver webdriver.Chrome() # 记录当前窗口句柄 current_window driver.current_window_handle # 执行打开新窗口的操作 driver.find_element(By.ID, open-new-page).click() # 等待新窗口出现 from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC wait WebDriverWait(driver, 10) wait.until(lambda d: len(d.window_handles) 1) # 切换到新窗口 new_window [w for w in driver.window_handles if w ! current_window][0] driver.switch_to.window(new_window) print(新窗口标题:, driver.title) # 切回原窗口 driver.switch_to.window(current_window)这种句柄切换的方式在自动化测试中非常常见。你在写测试用例时不要假设页面只会停留在同一个窗口里而是要在关键节点主动判断并切换。4. 实战案例模拟一个合规的预约提交流程下面我们不用任何真实票务网站而是通过一个本地 HTML 演示页面来模拟“活动预约提交”。这套流程结构上像极了预约购票场景但所有数据和接口都在本地完成你可以在自己的电脑上放心运行。4.1 项目结构首先创建一个演示项目目录auto_demo/ ├── demo.html ├── order_demo.py └── requirements.txtrequirements.txt只需要一行selenium4.2 编写本地演示页面创建一个最简单的页面用于测试自动填表和提交动作。这个页面上有一个用户名输入框、一个手机号输入框、一个预约按钮和一个成功提示区域。!-- 文件路径auto_demo/demo.html -- !DOCTYPE html html langzh-CN head meta charsetUTF-8 title自动化学习演示页面/title style body { font-family: Microsoft YaHei, sans-serif; padding: 30px; } .form-group { margin-bottom: 15px; } label { display: inline-block; width: 80px; } input { width: 220px; height: 30px; padding: 4px; } button { padding: 8px 24px; cursor: pointer; } .success { color: green; font-weight: bold; margin-top: 20px; } /style /head body h2活动预约模拟页面/h2 div classform-group label forusername用户名/label input typetext idusername nameusername placeholder请输入用户名 /div div classform-group label forphone手机号/label input typetext idphone namephone placeholder请输入手机号 /div button idsubmit-btn typebutton立即预约/button div idresult classsuccess styledisplay: none;预约成功请在开始时间后前往个人中心确认/div script document.getElementById(submit-btn).addEventListener(click, function () { const username document.getElementById(username).value.trim(); const phone document.getElementById(phone).value.trim(); if (!username || !phone) { alert(请填写完整信息); return; } if (!/^1\d{10}$/.test(phone)) { alert(手机号格式不正确); return; } document.getElementById(result).style.display block; }); /script /body /html这段页面代码用到了基础 DOM 事件绑定填入的信息通过按钮点击事件做校验校验通过后显示出成功提示。自动化脚本会自动执行填写和点击动作。4.3 编写 Python 自动化脚本这里的关键是先用file://协议直接打开本地页面避免外部环境对脚本的干扰。# 文件路径auto_demo/order_demo.py import re import time from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC def init_driver(): 初始化浏览器驱动 options webdriver.ChromeOptions() # 不让浏览器窗口自动关闭方便观察运行过程 options.add_experimental_option(detach, True) driver webdriver.Chrome(optionsoptions) driver.implicitly_wait(5) return driver def fill_form(driver, username, phone): 自动填充预约表单 username_input driver.find_element(By.ID, username) username_input.clear() username_input.send_keys(username) phone_input driver.find_element(By.ID, phone) phone_input.clear() phone_input.send_keys(phone) def submit_form(driver): 点击预约按钮并等待成功提示出现 submit_btn driver.find_element(By.XPATH, //button[idsubmit-btn]) submit_btn.click() wait WebDriverWait(driver, 10) success_element wait.until( EC.visibility_of_element_located((By.ID, result)) ) return success_element.text def validate_phone(phone): 手机号格式的简单校验 if not re.match(r^1\d{10}$, phone): raise ValueError(请输入正确的手机号) def main(): username test_user_001 phone 13800138000 validate_phone(phone) driver init_driver() try: # 打开本地页面 driver.get(file:///path/to/auto_demo/demo.html) # 这里请将路径改成 demo.html 在你电脑上的绝对路径 time.sleep(1) # 自动填充 fill_form(driver, username, phone) # 提交表单 result_text submit_form(driver) print(页面提示, result_text) # 断言是否成功提示 assert 预约成功 in result_text, 预约流程没有成功展示 print(自动化预约演示通过) finally: driver.quit() if __name__ __main__: main()运行脚本前你需要把demo.html的文件路径改成自己的绝对路径。一种稳妥的写法是使用 Python 自带的pathlibfrom pathlib import Path demo_path Path(__file__).parent / demo.html driver.get(demo_path.as_uri())as_uri()方法会把本地路径转换成file://格式避免手工拼接导致的转义问题。4.4 运行与验证在命令行中进入auto_demo目录执行python order_demo.py预期结果浏览器自动打开本地演示页面。用户名输入框自动填入test_user_001。手机号输入框自动填入13800138000。按钮被点击后页面出现绿色成功提示。控制台输出“预约成功”和“自动化预约演示通过”。这个案例虽然简单但它完整呈现了 Web 自动化中的核心链路打开页面、定位元素、输入内容、点击按钮、等待响应、断言结果。你可以在这个基础上把页面换成自己公司内部系统的测试环境把提交动作换成业务操作就形成了一条基本的冒烟测试用例。5. 把脚本改造成“定时触发”模式很多人研究抢票脚本本质上想要的是“到点自动执行”。这个能力本身没有错合规场景中也经常需要例如凌晨定时跑数据报表、每天早上自动打开系统完成巡检。下面介绍两种 Python 定时触发的思路。5.1 使用 time.sleep 做简单倒计时如果只需要在固定时间点触发一次可以先计算目标时间和当前时间的时间差然后睡眠等待。import time from datetime import datetime, timedelta def wait_until(target_datetime: datetime): 阻塞等待直到目标时间 while True: now datetime.now() if now target_datetime: print(到达目标时间, now.strftime(%Y-%m-%d %H:%M:%S)) return # 每隔 0.5 秒检查一次避免 sleep 太久导致时间误差 time.sleep(0.5) def main(): # 举例当前时间向后推 10 秒便于观察 target datetime.now() timedelta(seconds10) print(目标执行时间, target.strftime(%Y-%m-%d %H:%M:%S)) wait_until(target) # 到达时间后执行你的自动化函数 print(开始执行自动化任务...) if __name__ __main__: main()这种方案适合个人电脑上的简单场景。它的问题也很明显脚本不能中途退出电脑不能休眠时间同步依赖本机时钟。5.2 使用 schedule 库做周期任务如果你想真正体验工程化的定时任务推荐schedule这个轻量级库。pip install schedule示例代码如下import schedule import time def job(): print(定时任务执行中...) # 把上一个章节的 order_demo 主逻辑封装成函数后在这里调用 # 每天 20:30 执行一次 schedule.every().day.at(20:30).do(job) # 每隔 5 分钟执行一次 schedule.every(5).minutes.do(job) while True: schedule.run_pending() time.sleep(1)但这里要特别说明短周期高频任务很容易触发远端服务的频率限制。如果是针对外部网站不要设置过短的间隔如果是企业内部的测试环境也应尽量避开业务高峰和生产数据。5.3 更专业的方案Jenkins 或系统计划任务当自动化任务的复杂度上升之后你其实不需要自己写一个常驻的 while 循环来跑定时任务。使用 Jenkins、GitHub Actions 或者操作系统的计划任务可以让脚本独立运行、失败重试、输出日志也更方便团队协作。例如 Jenkins 上可以创建一个定时任务30 20 * * *这行配置表示每天 20:30 触发。这种方式比在 Python 脚本里写死等待循环更可靠所有执行记录都有迹可循。6. 常见问题与排查思路自动化过程中遇到问题是很正常的下面把新手最常见的问题整理成一张表方便你快速对照定位。问题现象常见原因解决思路找不到元素NoSuchElementException页面还没加载完成元素在 iframe 内部定位方式错误使用显式等待切换 iframe改用 XPath 或 id 定位元素被遮挡ElementClickInterceptedException有弹窗、广告遮住目标元素页面出现固定 header先关闭弹窗使用 JS 滚动到元素等待元素变为可点击状态启动 Chrome 报 session not createdChromeDriver 与 Chrome 版本不匹配使用 Selenium Manager 自动接管驱动或去驱动官网下载匹配版本浏览器被检测为自动化工具平台风控启动停止脚本操作转为人工操作合规使用时选择官方测试环境点击后没有反应按钮可能触发异步请求需要等待响应使用显式等待观察页面变化用日志记录每一步状态定时任务到时间不执行代码中的目标时间格式错误电脑休眠打印当前时间检查配置系统任务计划避免休眠影响输入框无法输入元素的属性或状态处于只读检查是否被 disabled、readonly 属性限制必要时用 JS 绕过但需评估合规性6.1 iframe 里的元素怎么处理很多页面会把登录框、弹窗内容放在 iframe 中。如果直接在当前页面查找元素Selenium 会找不到。from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC driver webdriver.Chrome() # 先切换到 iframe wait WebDriverWait(driver, 10) iframe wait.until(EC.presence_of_element_located((By.TAG_NAME, iframe))) driver.switch_to.frame(iframe) # 之后就能定位 itrame 内部的元素了 username driver.find_element(By.ID, login-username) # 操作完成后切回默认页面 driver.switch_to.default_content()判断元素是否在 iframe 里面有两种方法一是打开浏览器的开发者工具在 Elements 面板里看元素外层是否有 iframe 标签二是在控制台执行document.getElementsByTagName(iframe)看返回结果。6.2 页面跳转到新标签页后定位失败定位失败不一定都是元素没加载出来也可能是因为当前焦点还停留在原来的标签页。切换窗口句柄的代码在前面已经展示过了这里补充一个更稳妥的写法from selenium.webdriver.support.ui import WebDriverWait # 等待窗口数量大于 1 WebDriverWait(driver, 10).until(lambda d: len(d.window_handles) 1) # 切换到最新打开的窗口 driver.switch_to.window(driver.window_handles[-1])window_handles[-1]通常是最新打开的窗口但这不绝对。如果浏览器中维护了多个标签页建议使用“除最初窗口之外”的方式明确切换。6.3 控制台输出应包含哪些信息自动化脚本跑起来之后如果中间出了错不能只靠浏览器页面肉眼排查。合理的日志能够为你节省大量时间。下面的代码片段比 print 更合适后续维护。import logging logging.basicConfig( levellogging.INFO, format%(asctime)s - %(levelname)s - %(message)s, handlers[ logging.FileHandler(auto.log, encodingutf-8), logging.StreamHandler() ] ) logger logging.getLogger(__name__) def demo_log(): logger.info(自动化脚本开始执行) try: # 模拟业务逻辑 raise RuntimeError(模拟异常) except Exception as e: logger.exception(任务执行失败: %s, e) if __name__ __main__: demo_log()在实际项目中控制台输出应该包含四个关键节点步骤开始、步骤结束、成功标识、异常堆栈。日志里还要附带当前 URL、页面标题等上下文信息这样出现问题时可以较快还原现场。7. 最佳实践与工程建议7.1 合规红线先讲清楚在写任何自动化脚本之前必须先检查三件事目标系统是否允许自动化操作查看 robots 协议、开发者条款、平台用户协议。是否会用账号密码登录如果是请确认你有该账号的使用授权且不在脚本代码里硬编码明文密码。脚本是否高频短间隔请求如果是必须先评估对目标服务器的影响并优先选择测试环境。自动抢票等行为往往触碰的是平台核心交易链路平台方有动力也有能力持续升级风控。不要相信“百分百破解”的营销话术更不要把自己账号密码交给陌生脚本。网上确实存在不少恶意脚本通过伪装成抢票工具收集账号信息利用账号进行违规操作。7.2 代码里不保存明文密码建议使用环境变量或本地配置文件读取敏感信息。例如import os username os.getenv(ORDER_USER, ) password os.getenv(ORDER_PASSWORD, )如果你在本地开发可以创建.env文件但一定要把.env加入.gitignore避免传到公开仓库。7.3 优先使用稳定的定位策略不要把元素定位写死在易变的样式类上。可以给前端同事提一个建议在按钮、输入框上增加稳定的>button idsubmit-btn typebutton >driver.find_element(By.CSS_SELECTOR, [data-testidorder-submit-btn])这种定位方式与样式、顺序、文本内容都解耦是自动化测试领域比较推荐的做法。7.4 自动化代码同样需要异常处理不要只写“正常流程”也要考虑“失败流程”。一个健壮的自动化脚本应该做好下面几件事from selenium import webdriver from selenium.common.exceptions import TimeoutException, NoSuchElementException driver webdriver.Chrome() def click_submit_with_retry(times3): for attempt in range(times): try: driver.find_element(id, submit-btn).click() return True except (NoSuchElementException, TimeoutException) as e: print(f第 {attempt 1} 次点击失败: {e}) driver.refresh() return False try: success click_submit_with_retry() if not success: raise RuntimeError(多次点击仍失败请检查页面状态) finally: driver.quit()注意这里的重试并不是为了提高抢票成功率而是用来解决网络抖动、页面异步渲染等不稳定因素。在合规场景下合理重试能让脚本更稳定但如果你对同一个下单接口做无限重试那就已经完全偏离了技术学习的初衷。7.5 运行环境尽量容器化或虚拟化自动化脚本往往依赖浏览器和特定版本的驱动。为了减少“在我电脑上能跑在你电脑上跑不了”的问题可以在代码里形成一份清晰的依赖清单pip freeze requirements.txt如果项目规模变大建议使用 Docker 把浏览器环境和 Python 环境打包成镜像。Playwright 官方也提供了容器镜像可以确保不同机器之间的行为一致。7.6 设计独立的测试数据自动化操作尽量别直接动生产环境数据。如果是表单提交类脚本建议准备一套独立的测试账号、测试商品和测试页面数据可以随时重建。如果必须处理生产数据需要经过业务负责人授权并且遵循最小影响原则操作前对数据进行备份。8. 总结与后续学习路线这篇文章从网上流传的“自动抢票脚本”话题引入先解释了 Web 自动化的基本概念然后逐步讲解了 Python Selenium 的环境搭建、元素定位、显式等待、常用操作、定时触发和异常排查。你可以利用这套知识去搭建真实的自动化测试用例也可以把它用于日常的网页操作提效例如自动填表、批量数据录入、页面巡检和基础回归测试。如果你希望继续深入建议按下面的顺序学习Selenium 官方文档把WebDriverWait、ActionsChains、switch_to.frame等用法看过一遍。测试框架学习 pytest 与 Selenium 的集成理解 fixture 和用例断言。UI 自动化测试框架思考如何封装页面对象Page Object Model减少代码重复。Playwright掌握更现代的工具链比较它与 Selenium 的差异。接口自动化结合 requests 或 httpx 学习测试金字塔中间层的接口测试。最后想说一下学会写脚本只是第一步更重要的是拥有判断“什么该自动化、什么不该自动化”的工程素养。平台规则允许的情况下做技术尝试规则不允许时保持克制这才是成熟开发者该有的态度。希望大家把 Python 自动化当成一个提升效率的工具而不是与风控对抗的“武器”。如果这篇文章对你理解 Python 自动化有帮助可以先收藏起来等需要用的时候再来对照实操。你也可以自己动手改造第 4 节的代码试着写一个针对本地演示页面的 pytest 自动化测试用例相信你会对 Web 自动化有更直观的体会。
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。