playwrightpython教程(python中class教学)

技术Python中Playwright怎么用这篇文章将为大家详细讲解有关Python中Playwright怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Playwright是Mi

本文将详细解释如何在Python中使用剧作家。边肖觉得很实用,分享给大家参考。希望你看完这篇文章能有所收获。

剧作家是微软在2020年初开发的新一代自动化测试工具。其功能类似硒、Pyppeteer等。它可以驱动浏览器执行各种自动化操作。它的功能也很强大,支持市面上主流的浏览器。API函数简单而强大。虽然它诞生较晚,但发展非常迅速。

在Pyppeteer不再被维护的时代,拥有剧作家这个开源工具,文档丰富,功能强大,是一个很好的选择。

安装方式

conda config-addchannelconda-forge

conda config-addchannelmicrosoft

condainstallplaywright剧作家

Playwrightinstall上述命令的具体操作过程是下载剧作家并打包成Chromium、Firefox和Webkit安装浏览器二进制文件。

特点

剧作家支持当前所有主流浏览器,包括Chrome和Edge(基于Chrome)、Firefox、Safari(基于Webkit),并提供完整的自动控制API。

剧作家支持移动页面的测试,设备模拟技术可以用来测试移动网络浏览器中的响应网络应用。

剧作家支持所有浏览器的无头和非无头测试。

剧作家的安装配置非常简单。在安装过程中,会自动安装相应浏览器的驱动程序,不需要额外配置WebDriver。

剧作家提供了大量与自动化相关的API。页面加载时会自动等待对应的节点加载,大大简化了编写API的难度。

00-1010用python脚本导入剧作家,并启动三种浏览器(Chromium、Friefox和webkit)之一。剧作家支持两种写作模式,一种是像Pyppeter这样的异步模式,另一种是像Selenium这样的同步模式。我们可以根据实际需要选择不同的模式。

我们先来看一个基本同步模式的例子:

from剧作家. _ apiimportsync _剧作家

withsync _剧作家()asp:

forbrowser_typein[p.chromium,p.firefox,p.webkit]:

browser=browser_type.launch(无头=False)

page=browser.new_page()

page.goto('https://www.baidu.com ')

page.screenshot(路径=f ' screen-{ browser _ type . name }。png ')

打印(page.title())

Browser.close()首先我们在这里导入sync _剧作家方法,然后调用这个方法,这个方法返回一个PlaywrightContextManager对象,这个对象可以理解为浏览器的上下文管理器,在这里分配给变量P。然后调用PlaywrightContextManager对象的chrome、firefox、webkit浏览器实例,然后使用for循环依次执行它们的启动方法,并将headless设置为False。

这里有一个注意事项:如果launch没有设置为Flase,默认是以无头模式启动浏览器,我们看不到任何窗口。

启动方法返回一个。

浏览器(Browser)对象,我们将其复制为browser变量,然后调用new_page方法,相当于是新建一个选显卡,返回page对象并赋值给变量page,接下来就是调用page对象的一系列自动化API进行操作。当页面加载完毕之后生成截图、控制台输出结果就退出,上面的代码,调用了page对象的两个方法:

1、screenshot:参数传一个文件的名称,这样截图就会自动保存为该文件的名称。

2、title:返回页面的标题。

这时当前目录便会产生三个截图文件,都是百度的首页,文件名中都带有浏览器的名称,如图所示:

Python中Playwright怎么用

控制台运行结果:

百度一下,你就知道
百度一下,你就知道
百度一下,你就知道

除了上面所描述的同步模式之外,Playwright还支持异步模式,如果在项目中使用了asyncio,那么就应该是考虑要采用异步模式,使用异步的API,写法如下:

import asyncio
from playwright.async_api import async_playwright

async def main():
    async with async_playwright() as p:
        for browser_type in [p.chromium, p.firefox, p.webkit]:
            browser = await browser_type.launch()
            page = await browser.new_page()
            await page.goto("https://www.baidu.com")
            await page.screenshot(path=f"screenshot-{browser_type.name}.png")
            print(await page.title())
            await browser.close()
asyncio.run(main())

从上面的代码可以看出,整个写法和同步模式是很相似的。

注意:

1、导入的是async_playwright方法

2、在写法上添加 async/await 关键字。

代码生成

Playwright还有一个强大的功能,那就是可以录制我们在浏览器的操作,并将操作时的代码自动生成。这个功能可以通过Playwright命令调用codegen来实现,我们先看看codegen命令都有什么参数。

playwright codegen --help

结果类似如下:

Usage: npx playwright codegen [options] [url]

open page and generate code for user actions

Options:
-o, --output <file name> saves the generated script to a file
--target <language> language to generate, one of javascript, test, python, python-async, csharp (default:
"python")
-b, --browser <browserType> browser to use, one of cr, chromium, ff, firefox, wk, webkit (default: "chromium")
--channel <channel> Chromium distribution channel, "chrome", "chrome-beta", "msedge-dev", etc
--color-scheme <scheme> emulate preferred color scheme, "light" or "dark"
--device <deviceName> emulate device, for example "iPhone 11"
--geolocation <coordinates> specify geolocation coordinates, for example "37.819722,-122.478611"
--ignore-https-errors ignore https errors
--load-storage <filename> load context storage state from the file, previously saved with --save-storage
--lang <language> specify language / locale, for example "en-GB"
--proxy-server <proxy> specify proxy server, for example "http://myproxy:3128" or "socks5://myproxy:8080"
--save-storage <filename> save context storage state at the end, for later use with --load-storage
--save-trace <filename> record a trace for the session and save it to a file
--timezone <time zone> time zone to emulate, for example "Europe/Rome"
--timeout <timeout> timeout for Playwright actions in milliseconds (default: "10000")
--user-agent <ua string> specify user agent string
--viewport-size <size> specify browser viewport size in pixels, for example "1280, 720"
-h, --help display help for command

Examples:

$ codegen
$ codegen --target=python
$ codegen -b webkit https://example.com

在上面可以看到有几个选项,比如

  • -o表示输出代码文件的名称;

  • –target表示所使用的语言,默认是python,即会生成同步模式的操作代码,如果传入的是python-async则会生成异步模式的操作代码;

  • -b表示使用的浏览器类型,默认是Chrome浏览器;

  • –device可以模拟使用手机浏览器;

  • –lang表示设置浏览器语言,

  • –timeout可以设置页面加载超时时间。

了解这些用法之后,我们就来尝试启动Chrome浏览器,然后将操作结果输出到test3.py,命令如下:

playwright codegen -o test3.py --target python-async

可以看到浏览器还会高亮显示正在操作的节点,同时还显示了节点名称。

Python中Playwright怎么用

在操作的过程中代码是实时变化的。操作完毕之后即可关闭浏览器,Playwright会生成一个test3.py文件,内容如下:

import asyncio
from playwright.async_api import Playwright, async_playwright
async def run(playwright: Playwright) -> None:
    browser = await playwright.chromium.launch(headless=False)
    context = await browser.new_context()
    # Open new page
    page = await context.new_page()
    # Go to https://www.baidu.com/
    await page.goto("https://www.baidu.com/")
    # Click input[name="wd"]
    await page.click("input[name=\"wd\"]")
    # Click input[name="wd"]
    await page.click("input[name=\"wd\"]")
    # Fill input[name="wd"]
    await page.fill("input[name=\"wd\"]", "如何榜上富婆")
    # Click text=百度一下
    # async with page.expect_navigation(url="https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=%E5%A6%82%E4%BD%95%E6%A6%9C%E4%B8%8A%E5%AF%8C%E5%A9%86&fenlei=256&rsv_pq=ca59e3ec000cf6aa&rsv_t=5f82kcndi6iqNSwqOVo5sd%2BHSoqhzQHKLGVs1HFegxx02UtWAA5gHQbWBfw&rqlang=cn&rsv_enter=0&rsv_dl=tb&rsv_sug3=24&rsv_sug1=14&rsv_sug7=100&rsv_btype=i&prefixsug=%25E5%25A6%2582%25E4%25BD%2595%25E6%25A6%259C%25E4%25B8%258A%25E5%25AF%258C%25E5%25A9%2586&rsp=4&inputT=8686&rsv_sug4=68370&rsv_jmp=fail"):
    async with page.expect_navigation():
        await page.click("text=百度一下")
    # assert page.url == "https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=%E5%A6%82%E4%BD%95%E6%A6%9C%E4%B8%8A%E5%AF%8C%E5%A9%86&fenlei=256&rsv_pq=ca59e3ec000cf6aa&rsv_t=5f82kcndi6iqNSwqOVo5sd%2BHSoqhzQHKLGVs1HFegxx02UtWAA5gHQbWBfw&rqlang=cn&rsv_enter=0&rsv_dl=tb&rsv_sug3=24&rsv_sug1=14&rsv_sug7=100&rsv_btype=i&prefixsug=%25E5%25A6%2582%25E4%25BD%2595%25E6%25A6%259C%25E4%25B8%258A%25E5%25AF%258C%25E5%25A9%2586&rsp=4&inputT=8686&rsv_sug4=68370"
    # Close page
    await page.close()
    # ---------------------
    await context.close()
    await browser.close()
async def main() -> None:
    async with async_playwright() as playwright:
        await run(playwright)
asyncio.run(main())

可以看到这里的代码和我们之前编写的代码基本类似,而且也是完全可以运行的,运行之后就可以看到它又复现了我们刚才的动作。

另外这里的new_page并不是通过browser调用的,而是通过context变量调用的,context又是通过Browser对象调用的。这里的context变量相当于一个BrowserContext对象,它是一个类似于隐身模式的独立上下文环境,其运行资源是隔离的,保证互不干扰。

选择器

Playwright的文档非常的丰富,可以直接参考https://playwright.dev/python/docs/selectors

事件监听

page对象提供了一个on方法,它可以用来监听页面中各个事件,比如closeconsoleloadrequestresponse等等。

比如我们可以监听response事件,response事件可以在每次网络请求得到响应的时候触发,我们可以设置对应的回调方法获取对应的Response的全部信息。

from playwright.sync_api import sync_playwright

def on_response(response):
    print(f'Statue {response.status}:{response.url}')
with sync_playwright() as p:
    browser = p.chromium.launch(headless=False)
    page = browser.new_page()
    page.on('response', on_response)
    page.goto('https://www.kenshujun.cn/')
    page.wait_for_load_state('networkidle')
    browser.close()

创建page对象之后,就开始监听response事件,同时将回调方法设置为on_responseon_response对象接受一个参数,然后把状态码和连接都输出来。

Python中Playwright怎么用

看可以看到这里输出的结果与浏览器Network面板所加载的内容是一样的。

关于“Python中Playwright怎么用”这篇文章就分享到这里了,希望

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/153654.html

(0)

相关推荐

  • 位图索引BitMap举例分析

    技术位图索引BitMap举例分析这篇文章主要介绍“位图索引BitMap举例分析”,在日常操作中,相信很多人在位图索引BitMap举例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”位图索

    攻略 2021年12月8日
  • vue中给data添加属性会发生什么(vuedata里增加一个属性实时刷新吗)

    技术Vue data中随意改一个属性视图就会更新吗这篇文章主要讲解了“Vue data中随意改一个属性视图就会更新吗”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vue

    攻略 2021年12月16日
  • 手机软件开发费用,开发一个App的费用是多少

    技术手机软件开发费用,开发一个App的费用是多少首先手机软件开发费用,一个App开发的基本要求,至少需要ios和android两个平台,来满足现在主要的手机平台使用用户,ios和android平台其中任意一个的开发价格大

    生活 2021年10月25日
  • 心形线,如何用几何画板画出笛卡尔心形线

    技术心形线,如何用几何画板画出笛卡尔心形线1心形线、新建参数。右键绘图区空白处,“新建参数”,标签为a,数值为4,单位“无”。
    2、快捷键“Ctrl+G”,调出绘制新函数编辑器。点“方程”,选极坐标方程。在编辑

    生活 2021年10月30日
  • python程序二叉树最大深度(怎样求二叉树的深度用python)

    技术如何找出python二叉树的最大深度这期内容当中小编将会给大家带来有关如何找出python二叉树的最大深度,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1,问题简述 给定一

    攻略 2021年12月13日
  • openwrt设置远程管理(openwrt模式怎么设置)

    技术OpenWRT如何启用工作模式开关和联网小编给大家分享一下OpenWRT如何启用工作模式开关和联网,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧! 主要配置 rc.local 脚本,内容如下:r

    攻略 2021年12月18日