Chrome Webdriver 如何将窗口设为可见,或者设为 active 状态
資深大佬 : nznd 2
原始需求:
- 公司使用的工单系统无法正常推送邮件通知,自己写了一个 python 脚本检测 ticket 列表,如果有新的,就通知
实现过程:
- 使用 selenium 进行网页监测,通过执行 js 的 querySelector 查找元素,返回值丢给 python 处理
遇到困难:
- shadowroot不能在 webdriver 直接处理,改用 js 语句处理,算是已解决
- 网页如果不 active (包括但不限于被最小化,按压 win+d,有窗口被最大化)页面元素不会刷新,目前不知道是什么原因导致的,推测与 shadowroot 有关,但是无相关资料查实( ps: 使用 –headless 也会导致获取不到元素)
试图解决:
- 尝试使用 win32gui 的 SetForegroundWindow 解决,但是会随机选择 chrome 窗口前置,查找进程使用的进程名,和普通 chrome 一样,均为 Google Chrome
- 尝试直接抓包请求,但是使用证书单点登录,直接用证书路径需要管理员权限而且有安全隐患,转头尝试 chrome 插件传输 cookie 到 python,算解决一半;网站使用的是 graphql 请求体看的我脑壳痛,写不下去解析,最终放弃这条路
- 最终选择在读取路径失败时右下角通知一下,然后手动打开窗口让他加载
页面地址只限内网访问,还需要什么信息尽管提,我会尽快回复
有没有熟练的老哥指点一下哪里可以优化
大佬有話說 (10)