Python Playwright的使用详解
作者:梦想橡皮擦 发布时间:2021-10-10 03:30:44
实战场景
本篇博客为大家介绍一款新的自动化测试工具,效果类似 selenium
,但是这个模块年轻。
模块名称为 playwright-python
,微软开源的,是针对 Python 语言的纯自动化工具,可以通过 API 调用浏览器,github 地址在本文末尾。
接下来将通过 3 篇博客为大家详细介绍该 playwright-python
,彻彻底底了解它。
正式开始前依旧是模块安装:
pip install playwright
该模块安装非常快,但完整体验还需要安装浏览器相关驱动,这个有点大,命令如下:
python -m playwright install
安装时注意使用国内源!
等待过程中,可以查阅输出日志,核对安装了哪些模块:
Downloading FFMPEG
:FFMPEG;Downloading Firefox 104.0
:火狐浏览器驱动;Downloading Chromium
:谷歌浏览器驱动;Downloading Webkit 16.0
:Webkit 浏览器驱动。
实战操作
第一次实战操作,先从不写代码开始,通过下述命令启动浏览器,然后【录制】我们的操作过程。
python -m playwright codegen
运行代码之后,弹出默认浏览器和一个代码录制展示框,具体如下所示:
下面就可以在左侧的浏览器窗口中进行操作,然后观察右侧自动生成的代码段。
在地址栏输入 baidu.com 跳转到百度首页,然后输入 航天员,点击搜索按钮,生成的代码如下所示。
将生成的代码复制到开发工具中,直接运行就可以得到刚刚相同的操作。
from playwright.sync_api import Playwright, sync_playwright, expect
def run(playwright: Playwright) -> None:
browser = playwright.chromium.launch(headless=False)
context = browser.new_context()
# Open new page
page = context.new_page()
# Go to https://www.baidu.com/
page.goto("https://www.baidu.com/")
# Click input[name="wd"]
page.locator("input[name=\"wd\"]").click()
# Fill input[name="wd"]
page.locator("input[name=\"wd\"]").fill("航天员")
# Press Enter
page.locator("input[name=\"wd\"]").press("Enter")
page.wait_for_url(
"https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=%E8%88%AA%E5%A4%A9%E5%91%98&fenlei=256&rsv_pq=0xfde7decb0011bfe6&rsv_t=3a67vLT%2Buti4VKw0mDppSrydbnq6CGsyOVNNxN%2F39naR6lYvxacuqvbYKRs0&rqlang=en&rsv_enter=1&rsv_dl=tb&rsv_sug3=24&rsv_sug1=24&rsv_sug7=100&rsv_sug2=0&rsv_btype=i&prefixsug=%25E8%2588%25AA%25E5%25A4%25A9%25E5%2591%2598&rsp=5&inputT=5824&rsv_sug4=6786&rsv_jmp=fail")
# ---------------------
context.close()
browser.close()
with sync_playwright() as playwright:
run(playwright)
接下来我们分析一下其生成的代码含义。
from playwright.sync_api import Playwright, sync_playwright
从 playwright.sync_api
模块导入 Playwright
和 sync_playwright
,看到关键字 sync
,可以猜测这是一个同步操作,那与之对应的,也是未来我们要对比学习的,就是异步接口相关内容,这里先埋下一个伏笔,下篇博客在进行讨论。
browser = playwright.chromium.launch(headless=False)
初始化一个谷歌浏览器对象,并且不是无头浏览器,即在桌面打开浏览器窗口。launch()
方法包含很多参数,常用的有以下内容:
headless
:是否为无头浏览器,即是否显示浏览器窗口,默认为不显示;channel
:浏览器版本,"chrome", "chrome-beta", "chrome-dev", "chrome-canary";proxy
:代理设置;timeout
:超时时间,默认 30s。
context = browser.new_context()
page = context.new_page()
打开一个新浏览器,创建一个新页面,其中 browser.new_context()
的参数都是与浏览器配置相关的内容,实践的时候需要特别设置的在这里设置,例如下述参数:
user_agent
:UA 代理;viewport
:页面大小,比例,例 1024*768;offline
:离线模式加载。
page.goto("https://www.baidu.com/")
page.locator("input[name=\"wd\"]").click()
……
page.wait_for_url(……)
goto()
:地址跳转,即浏览器跳转;locator()
:定位元素;wait_for_url()
:等待页面加载完毕。
本文末尾重点介绍一下 goto()
相关内容,剩余函数下篇博客继续说明。 goto()
函数的重要参数:
url
:跳转地址,必须包含协议,例如http://
或者https://
;referer
:请求头中的referer
参数;timeout
:最大操作时间(毫秒),默认为 30 秒;wait_until
:默认操作成功时,执行的内容,还有几个事件,分别是domcontentloaded
,networkidle
,commit
项目开源地址:https://github.com/microsoft/playwright-python
官方手册:https://playwright.dev/python/docs/intro
来源:https://juejin.cn/post/7154188909574881310
猜你喜欢
- 使用非对称加密主要是借助openssl的公钥和私钥,用公钥加密私钥解密,或者私钥加密公钥解密。1.安装openssl和php的openssl
- 格式为: SCRENC [/s] [/f] [/xl] [/l defLanguage ] [/e de
- 在读取https://github.com/Embedding/Chinese-Word-Vectors中的中文词向量时,选择了一个有3G多
- 前言随着网站的内容的增多和用户访问量的增多,网站加载会越来越慢,受限于带宽和服务器同一时间的请求次数的限制,,我们往往需要在此时对我们的网站
- 摘要:现代网站和web应用程序趋向于依赖客户端的大量的javascript来提供丰富的交互。特别是通过不刷新页面的异步请求来返回数据或从服务
- 下面,小编将通过一组实例演示,让大家更直观,更清楚明白的了解要设置中文这一内容的操作步骤。首先展示实例代码:import pygamefro
- 本文实例讲述了Python实现操纵控制windows注册表的方法。分享给大家供大家参考,具体如下:使用_winreg模块的话基本概念:KEY
- 看代码吧~import gcfor x in list(locals().keys())[:]: del loca
- FCKeditor是目前互联网上最好的在线编辑器,功能强大,支持IE 5.5+ (Windows), Fire
- 发现问题今天准备学习爬虫的scrapy模块,在这之前需要安装许多别的模块,Twisted就是其一一开始想着直接用pycharm来安装就行了,
- 哲学家就餐问题:哲学家就餐问题是典型的同步问题,该问题描述的是五个哲学家共用一张圆桌,分别坐在五张椅子上,在圆桌上有五个盘子和五个叉子(如下
- opencv中也提供了一种类似于Keras的神经网络,即为ann,这种神经网络的使用方法与Keras的很接近。关于mnist数据的解析,读者
- 一、字符串与字节数组?字符串是 Go 语言中最常用的基础数据类型之一,本质上是只读的字符型数组,虽然字符串往往都被看做是一个整体,但是实际上
- 最近,我在做网页的时候,经理老是反应网页中一些栏目中没有背景图片。我说:背景图片有的,你刷新看看。但是他说:我可以刷新看看,但是你不能老是让
- 这一段时间,我在进行“09帮助中心升级”项目,负责其中的白板和视觉设计,总算和Axure有了第一次的正式会晤。由于之前已经零散地学习过一些A
- 本文实例讲述了python计算时间差的方法。分享给大家供大家参考。具体分析如下:1、问题:给定你两个日期,如何计算这两个日期之间间隔几天,几
- 计算机之所以能做很多自动化的任务,因为它可以自己做条件判断。比如,输入用户的年龄,根据年龄打印不同的内容。。。Python程序中,能让计算机
- 前言本篇和大家分享的是使用python简化对jar包操作命令,封装成简短关键字或词,达到操作简便的目的。最近在回顾和构思shell脚本工具,
- 在seclists中看到一个很惊人的thread:http://seclists.org/oss-sec/2012/q2/493MySQL爆
- 以下的文章主要是对MySQL limit查询优化的具体内容的介绍,我们大家都知道MySQL数据库的优化是相当重要的。其他最为常用也是最为需要