尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Python 自动化接单实战(六):动态网页流程如何保存登录态与失败证据

Python 自动化接单实战(六):动态网页流程如何保存登录态与失败证据
📅 发布时间:2026/7/29 19:12:54

本篇复用上一篇sync.py的get_json()与sync.db:先查询数据库中未完成的order_id,仅把 API 无法覆盖的授权动作交给browser_flow.py,下载结果再以同一业务键回写。上一章的同步库就是本篇任务队列。只有客户拥有页面操作权限时才使用浏览器,凭据不写进源码,也不用固定休眠假装稳定。

一、把登录与业务动作拆开

下面以 Playwright 同步 API 为例。首次由客户在可见浏览器中完成登录,脚本只保存会话状态;状态文件必须加入忽略规则并限制权限。

from__future__importannotationsfrompathlibimportPathfromplaywright.sync_apiimportsync_playwright STATE=Path(".local/session.json")STATE.parent.mkdir(exist_ok=True)defauthorize()->int:try:withsync_playwright()asp:browser=p.chromium.launch(headless=False)context=browser.new_context()page=context.new_page()page.goto("https://example.test/login",wait_until="domcontentloaded")input("完成授权登录后按回车:")context.storage_state(path=str(STATE))browser.close()exceptExceptionasexc:print(f"authorize_failed type={type(exc).__name__}")return2STATE.chmod(0o600)print(f"state_saved path={STATE}")return0if__name__=="__main__":raiseSystemExit(authorize())

运行输出:

state_saved path=.local/session.json

业务脚本使用storage_state,若被重定向回登录页就停止并提示重新授权,不在日志中打印 Cookie。

二、等待业务结果而不是等待秒数

importhashlibimportsqlite3withsync_playwright()asp:browser=p.chromium.launch()context=browser.new_context(storage_state=str(STATE))page=context.new_page()withsqlite3.connect("sync.db")asdb:tasks=db.execute("select id from items where export_sha256 is null order by id").fetchall()for(order_id,)intasks:page.goto(f"https://example.test/tasks/{order_id}")withpage.expect_download()aspending:page.get_by_role("button",name="导出").click()target=Path("downloads")/f"{order_id}.pdf"target.parent.mkdir(exist_ok=True)pending.value.save_as(target)digest=hashlib.sha256(target.read_bytes()).hexdigest()db.execute("update items set export_sha256=? where id=?",(digest,order_id))print(f"order_id={order_id}sha256={digest[:12]}")browser.close()

输出示例:

order_id=A-1042 sha256=83da2f4c0a71

三、失败时保留最小证据

为每次任务生成独立目录,只在失败时保存截图、当前 URL、步骤名与脱敏日志。页面结构变化应让定位器明确失败,不要用坐标点击绕过问题。

四、为什么等待条件必须对应业务事实

固定休眠只能说明时间过去了,不能说明导出完成。页面可能在一秒内完成,也可能十秒后仍在排队;固定五秒既浪费快请求,又误判慢请求。expect_response把等待绑定到导出接口,下载场景还可绑定expect_download,最后校验状态码、文件名和内容摘要。等待对象越接近验收事实,偶发失败越少。

登录态文件相当于钥匙,而不是普通缓存。它可能包含 Cookie 和本地存储令牌,所以必须放在版本库外、限制权限、设置有效期并允许客户撤销。脚本检测到重定向登录页时应停止,不能自动尝试未知凭据。记忆点是:浏览器自动化等待证据,不等待秒数;保存钥匙,不保存密码。

五、失败证据也有最小化原则

截图、URL、步骤名、业务键和脱敏错误足以定位大多数页面变化。默认保存完整 HTML 可能带入个人信息,录制所有网络请求可能泄漏令牌,因此只有客户授权且确有需要时才扩大证据范围。证据目录按任务键隔离,并为保留期限设置清理规则。

验收时故意让会话过期、按钮改名和导出返回 500,确认三种故障分别落到授权、定位和服务端类别。成功下载的文件摘要回写sync.db,使重复运行跳过已完成业务键。下一篇将读取这张表和浏览器结果,生成确定性的日报任务。

定位器也属于业务契约。优先使用角色、可访问名称或稳定测试属性,因为它们描述“导出按钮”这一语义;易变的层级 CSS 和屏幕坐标只描述当前布局。若页面出现两个同名按钮,代码应缩小到明确区域并断言唯一性,让歧义尽早失败。自动猜第一个元素虽然能暂时运行,却可能在页面改版后操作错误订单。

下载结束后还要验证文件,而不是看到浏览器事件就宣布成功。检查文件非空、扩展名与响应类型匹配,计算摘要并以临时名落盘,最后原子改名。数据库回写放在文件确认之后;进程提前退出时,旧任务仍会重试,摘要则阻止重复文件污染。这样浏览器层继续遵守前几篇建立的“结果可追溯、失败可恢复”契约。


📌 本文把浏览器流程拆成客户授权登录、语义动作和失败证据,避免凭据泄漏与固定休眠带来的不稳定。

💬 你的网页流程更容易卡在登录过期、动态元素、下载文件还是结果确认?

👉 关注《Python 自动化接单实战》,下一篇继续把多个数据源汇总成可定时运行的报告任务。

参考来源

  • Dev.to|6 Open Source Tools That Give You the Web Back
  • Hacker News|Removing React.js and adapting htmx

相关新闻

  • 网站建设公司哪家口碑好?2026年高端网站建设供应商深度盘点,国内靠谱建站服务商全解析 - 生活动态圈
  • 【AI合同风险评估实战指南】:20年法务+AI工程师联合提炼的7大高危雷区与自动拦截方案
  • 2026大件超限运输车辆称重仪主流品牌,浙江润鑫以精工品质成为行业推荐 - 品牌速递

最新新闻

  • 最新AI+CMIP6数据分析与可视化、降尺度技术与气候变化的区域影响、极端气候分析
  • 南京大学 操作系统 (JYY) 学习笔记:动态链接的黑魔法与内存入侵 (Dynamic Linking)
  • 南京大学 操作系统 (JYY) 学习笔记:从 UNIX 到 Linux 与庞大的应用生态
  • 保险理赔AI化转型白皮书(2024监管合规版):覆盖92%拒赔争议场景的NLP+规则引擎双模架构
  • 2026年7月目前靠谱的真空袋直销厂家推荐,服装自粘袋/食品袋/加厚平口袋/肉类真空袋/立体风琴袋,真空袋企业怎么选择 - 品牌推荐师
  • 如何在安卓设备上快速实现摄像头视频替换:终极免费指南

日新闻

  • 金融舆情监测系统:多语言情感分析与实时可视化技术解析
  • QT C++调用Python异常处理:PyBind11实战与跨语言编程指南
  • A-47双麦回音消除模块:主次麦空间分布与差分连接对ENC性能的影响

周新闻

  • 大连理工大学与东京大学联手打造的“主动型AI助手“
  • 170.2026年国家级科研瓶颈:超精密单点金刚石切削(SPDT)光学表面生成
  • SongBloom:革命性歌曲生成框架深度解析——如何通过交织自回归与扩散模型创作完整音乐

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号