发布时间:2026/7/29 18:53:23
Python 自动化接单实战(六):动态网页流程如何保存登录态与失败证据 本篇复用上一篇sync.py的get_json()与sync.db先查询数据库中未完成的order_id仅把 API 无法覆盖的授权动作交给browser_flow.py下载结果再以同一业务键回写。上一章的同步库就是本篇任务队列。只有客户拥有页面操作权限时才使用浏览器凭据不写进源码也不用固定休眠假装稳定。一、把登录与业务动作拆开下面以 Playwright 同步 API 为例。首次由客户在可见浏览器中完成登录脚本只保存会话状态状态文件必须加入忽略规则并限制权限。from__future__importannotationsfrompathlibimportPathfromplaywright.sync_apiimportsync_playwright STATEPath(.local/session.json)STATE.parent.mkdir(exist_okTrue)defauthorize()-int:try:withsync_playwright()asp:browserp.chromium.launch(headlessFalse)contextbrowser.new_context()pagecontext.new_page()page.goto(https://example.test/login,wait_untildomcontentloaded)input(完成授权登录后按回车)context.storage_state(pathstr(STATE))browser.close()exceptExceptionasexc:print(fauthorize_failed type{type(exc).__name__})return2STATE.chmod(0o600)print(fstate_saved path{STATE})return0if__name____main__:raiseSystemExit(authorize())运行输出state_saved path.local/session.json业务脚本使用storage_state若被重定向回登录页就停止并提示重新授权不在日志中打印 Cookie。二、等待业务结果而不是等待秒数importhashlibimportsqlite3withsync_playwright()asp:browserp.chromium.launch()contextbrowser.new_context(storage_statestr(STATE))pagecontext.new_page()withsqlite3.connect(sync.db)asdb:tasksdb.execute(select id from items where export_sha256 is null order by id).fetchall()for(order_id,)intasks:page.goto(fhttps://example.test/tasks/{order_id})withpage.expect_download()aspending:page.get_by_role(button,name导出).click()targetPath(downloads)/f{order_id}.pdftarget.parent.mkdir(exist_okTrue)pending.value.save_as(target)digesthashlib.sha256(target.read_bytes()).hexdigest()db.execute(update items set export_sha256? where id?,(digest,order_id))print(forder_id{order_id}sha256{digest[:12]})browser.close()输出示例order_idA-1042 sha25683da2f4c0a71三、失败时保留最小证据为每次任务生成独立目录只在失败时保存截图、当前 URL、步骤名与脱敏日志。页面结构变化应让定位器明确失败不要用坐标点击绕过问题。四、为什么等待条件必须对应业务事实固定休眠只能说明时间过去了不能说明导出完成。页面可能在一秒内完成也可能十秒后仍在排队固定五秒既浪费快请求又误判慢请求。expect_response把等待绑定到导出接口下载场景还可绑定expect_download最后校验状态码、文件名和内容摘要。等待对象越接近验收事实偶发失败越少。登录态文件相当于钥匙而不是普通缓存。它可能包含 Cookie 和本地存储令牌所以必须放在版本库外、限制权限、设置有效期并允许客户撤销。脚本检测到重定向登录页时应停止不能自动尝试未知凭据。记忆点是浏览器自动化等待证据不等待秒数保存钥匙不保存密码。五、失败证据也有最小化原则截图、URL、步骤名、业务键和脱敏错误足以定位大多数页面变化。默认保存完整 HTML 可能带入个人信息录制所有网络请求可能泄漏令牌因此只有客户授权且确有需要时才扩大证据范围。证据目录按任务键隔离并为保留期限设置清理规则。验收时故意让会话过期、按钮改名和导出返回 500确认三种故障分别落到授权、定位和服务端类别。成功下载的文件摘要回写sync.db使重复运行跳过已完成业务键。下一篇将读取这张表和浏览器结果生成确定性的日报任务。定位器也属于业务契约。优先使用角色、可访问名称或稳定测试属性因为它们描述“导出按钮”这一语义易变的层级 CSS 和屏幕坐标只描述当前布局。若页面出现两个同名按钮代码应缩小到明确区域并断言唯一性让歧义尽早失败。自动猜第一个元素虽然能暂时运行却可能在页面改版后操作错误订单。下载结束后还要验证文件而不是看到浏览器事件就宣布成功。检查文件非空、扩展名与响应类型匹配计算摘要并以临时名落盘最后原子改名。数据库回写放在文件确认之后进程提前退出时旧任务仍会重试摘要则阻止重复文件污染。这样浏览器层继续遵守前几篇建立的“结果可追溯、失败可恢复”契约。 本文把浏览器流程拆成客户授权登录、语义动作和失败证据避免凭据泄漏与固定休眠带来的不稳定。 你的网页流程更容易卡在登录过期、动态元素、下载文件还是结果确认 关注《Python 自动化接单实战》下一篇继续把多个数据源汇总成可定时运行的报告任务。参考来源Dev.to6 Open Source Tools That Give You the Web BackHacker NewsRemoving React.js and adapting htmx

相关新闻

2026/7/29 18:48:22

2026 年,国内网管平台如何替换 SolarWinds?

引言2026 年是国内政企信创规模化落地的关键窗口期。依据国企、金融、政务行业国产化时间表,基础设施运维监控系统正式进入集中替换周期。长期以来,SolarWinds Orion 凭借完善的网络监控能力,广泛应用于国内大型企业数据中心、广域网运维场景…

2026/7/29 18:48:22

Multicorn高级技巧:自定义Python外部数据包装器开发实战

Multicorn高级技巧:自定义Python外部数据包装器开发实战 【免费下载链接】Multicorn Data Access Library 项目地址: https://gitcode.com/gh_mirrors/mu/Multicorn Multicorn是PostgreSQL的一个强大扩展,它允许开发者使用Python编写外部数据包装…

2026/7/29 19:58:52

q搜索 / q过滤解释(q参数、query参数、q=)

新增普通表单的手动岗位新建/编辑/删除(PRD 3.1 路径 0),并接入新的 q 搜索参数 q搜索q过滤是什么? 文章目录"q 搜索" / "q 过滤" 解释什么是 q 参数?q 搜索 vs q 过滤在你提到的需求中的含义常见…

2026/7/29 19:58:52

宠物电商平台开发排名,商城会员托运权益互通底层设计

宠物电商平台开发排名,商城会员托运权益互通底层设计在宠物电商平台行业开发排名评判体系中,除了基础的商城交易、商品管理、订单结算能力,会员权益体系的完整性、多业务权益互通能力,是区分平台基础版与商业化成熟版的核心指标。…

2026/7/28 13:41:25

PDF合并与动态水印的工程化方案:2026国内免费工具实测对比

一、背景与测试方案 在实际项目交付中,PDF文件合并与版权保护水印的叠加是一个高频但容易被低估的技术需求。典型的处理链路涉及:多源PDF的文件流合并、页面级水印渲染(含透明度混合与图层叠加)、输出文件体积控制。看似简单的操作…

2026/7/29 0:02:56

商标注册找代理还是自己办?算清这笔“时间账”和“风险账

商标注册,找代理还是自己办?帮你算清这笔“时间账”和“风险账”“商标注册,找代理还是自己办?”这是深圳每个创业者都会遇到的灵魂拷问。有人说找代理是花冤枉钱,有人说自己办风险太高。到底哪种更划算?本…

2026/7/29 0:02:56

免费开源RPA工具OpenRPA:企业级自动化流程的终极解决方案

免费开源RPA工具OpenRPA:企业级自动化流程的终极解决方案 【免费下载链接】openrpa Free Open Source Enterprise Grade RPA 项目地址: https://gitcode.com/gh_mirrors/op/openrpa 你是否厌倦了每天重复枯燥的数据录入和报表整理工作?是否希望有…

2026/7/29 0:02:56

KMS智能激活工具:一站式解决Windows和Office激活难题

KMS智能激活工具:一站式解决Windows和Office激活难题 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为系统弹出激活提示而烦恼吗?KMS智能激活工具能够帮你彻底告别W…

2026/7/29 13:12:43

3个高效策略:快速掌握Axure中文界面配置

3个高效策略:快速掌握Axure中文界面配置 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的英文界面感…