前言:
此刻咱们对“浏览器自动化操作”大约比较关切,各位老铁们都需要了解一些“浏览器自动化操作”的相关内容。那么小编同时在网络上汇集了一些有关“浏览器自动化操作””的相关文章,希望看官们能喜欢,姐妹们一起来学习一下吧!1. 问题背景
最近接手了一个数据挖掘的任务,有大量过程重复的浏览器点击操作,不胜其烦。于是就在考虑通过浏览器自动化脚本来完成。最开始尝试用selenium来实现,摸索了一会儿初步实现了目标网页的登录操作,但是涉及到里面元素的解析和自动化工具相关api的使用,就难到我这个不太懂前端的人了。
后来同事帮我找了一个神奇的工具playwright,可以自动生成相关浏览器动作的python代码,使得这一问题得以高效解决,实现了自动登录、选择标签、设置条件、自动翻页、创建任务等,从而达到了高效批量处理的目的,整个过程非常丝滑,解放了双手,当时还是挺兴奋的。下面就简单记录一下playwright的使用过程:
2. playwright
playwright是微软开发的一个浏览器自动化框架,简直是太好用了。更多详细介绍以及API使用说明请参考:
Playwright for Python
以下用力扣网站做一个简单示例:
2.1 安装playwright
安装playwright和框架内置浏览器
pip install pytest-playwrightplaywright install chromium # 可选 firefox,chromium, webkit2.2 录制浏览器动作翻译成代码
终端内运行以下代码,就会打开浏览器,并在另一个窗口生成在浏览器上的动作对应的python代码。codegen后面接着网址,-b指定浏览器类型。
python3 -m playwright codegen -b chromium
视频加载中...
2.3 生成的python代码
from playwright.sync_api import Playwright, sync_playwright, expectdef run(playwright: Playwright) -> None: browser = playwright.chromium.launch(headless=False) context = browser.new_context() page = context.new_page() page.goto(";) page.get_by_role("button", name="难度").click() page.get_by_role("menuitem", name="简单").locator("div").first.click() page.get_by_role("button", name="标签").click() page.locator("[id=\"headlessui-popover-panel-\\:r3p\\:\"]").get_by_text("二叉树").click() page.locator("[id=\"headlessui-popover-panel-\\:r3p\\:\"]").get_by_text("深度优先搜索").click() # --------------------- context.close() browser.close()with sync_playwright() as playwright: run(playwright)2.4 遇到的问题
这个框架生成的代码在大部分行是可以用的,但对于某些元素它会根据元素id进行直接定位,但由于网站某些元素id可能一直变化,导致脚本再次运行后不能匹配到正确元素,浏览器动作停止,这时候可能需要换其它方式进行匹配。
比如,利用目标元素与其它元素的相对位置关系、匹配包含的text等进行定位。比如我当时用下面这行代码替换了原来失败的id定位方式,才让代码自动化跑起来:
page.frame_locator("iframe").locator("li").locator("span").filter(has_text="二叉树").nth(2).click() # 实际文本已替换3. 总结
本人不是做前端的,第一次尝试浏览器自动化,但这种效率提升的感觉真的非常爽,也给了我一点启示。有时也不要只是埋头苦干,应该多学习,适时对自己的工作进行反思,思考一下哪些是每天重复劳动但可以提升效率的地方。
你好,我是七昂,致力于分享C++、操作系统、软件架构、机器学习、效率提升等系列文章。希望我们能一起探索程序员修炼之道,高效学习、高效工作。如果我的创作内容对您有帮助,请点赞关注。如果有问题,欢迎随时与我交流。感谢你的阅读。
标签: #浏览器自动化操作 #浏览器 自动化 #浏览器 自动化 脚本录制 #浏览器自动化技术 #浏览器自动化脚本