微软开源最强Python自动化神器Playwright!不用写一行代码!自动生成代码还竟然如此流畅!妈妈再也不用担心我不会写代码了!

简介: 微软开源最强Python自动化神器Playwright!不用写一行代码!自动生成代码还竟然如此流畅!妈妈再也不用担心我不会写代码了!

安装

# 安装playwright库
pip install playwright
# 安装浏览器驱动文件
python -m playwright install
#再安装
playwright install

要求:python版本3.7+


使用Playwright无需写一行代码,我们只需手动操作浏览器,它会录制我们的操作,然后自动生成代码脚本。

下面就是录制的命令codegen,仅仅一行。

python -m playwright codegen

codegen的用法可以使用–help查看,如果简单使用就是直接在命令后面加上url链接,如果有其他需要可以添加options。我就把结果粘贴出来:

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
  --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:规定生成脚本的语言,有JS和Python,java,c#等,默认为Python

-b:指定浏览器驱动

举个例子:

比如,我要在baidu.com搜索,用chromium驱动,将结果保存为my.py的python文件。

python -m playwright codegen --target python -o 'my.py' -b chromium https://www.baidu.com

1.png

这就自动生成文件:

1.png

现在我还得改个名。大家可以试试。

当你在浏览器继续点击,他会继续更新生成新的代码:

这次我们执行下命令:

python -m playwright codegen --target python -o 'my.py' -b chromium https://www.baidu.comom

点击一下,代码就自动更新:

1.png

再点击一下,代码还会继续更新:

1.png

结束后自动关闭浏览器,保存生成的自动化脚本到py文件如下:

from playwright.sync_api import Playwright, sync_playwright
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 text=阿里女员工称被侵害 事发饭店回应
    with page.expect_popup() as popup_info:
        page.click("text=阿里女员工称被侵害 事发饭店回应")
    page1 = popup_info.value
    # Click em:has-text("阿里女员工称被侵害 事发饭店回应")
    with page1.expect_popup() as popup_info:
        page1.click("em:has-text(\"阿里女员工称被侵害 事发饭店回应\")")
    page2 = popup_info.value
    # Close page
    page2.close()
    # Close page
    page1.close()
    # Close page
    page.close()
    # ---------------------
    context.close()
    browser.close()
with sync_playwright() as playwright:
    run(playwright)

playwright还提供了同步和异步的API接口,这里也有官方文档,如果你英文还可以,可以参考文档:

https://playwright.dev/python/docs/intro/

这里我继续演示一个例子。

我就以访问我的CSDN为例子,我则需要在terminal执行以下命令:

python -m playwright codegen --target python -o 'my.py' -b chromium https://blog.csdn.net/weixin_46211269?spm=1000.2115.3001.5343

回车即可开始神操作!

1.png

看效果,我多贴几个演示这个动态过程:

1.png

我点击了一下一篇文章,代码也跟着自动更新:

1.png

那么我还想再给自己点个赞,似乎被发现了猫腻?那我就用手机扫码登录,因为这是新的浏览器,没有登陆历史,所以这是正常的。

1.png

登陆了,我就给自己点了一个赞,代码也同时更新了我点赞的部分。

手残,点了一下图片,他还是把代码加了一部分来点击照片,下面是‘my.py’新的代码:

from playwright.sync_api import Playwright, sync_playwright
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://blog.csdn.net/weixin_46211269?spm=1000.2115.3001.5343
    page.goto("https://blog.csdn.net/weixin_46211269?spm=1000.2115.3001.5343")
    # Click text=Django3.0入门教程:文章发布系统
    with page.expect_popup() as popup_info:
        page.click("text=Django3.0入门教程:文章发布系统")
    page1 = popup_info.value
    # Click #is-like-img
    page1.click("#is-like-img")
    # Click text=CSDN App扫码
    page1.frame(name="passport_iframe").click("text=CSDN App扫码")
    # Go to https://blog.csdn.net/weixin_46211269/article/details/119553344?spm=1001.2014.3001.5501
    page1.goto("https://blog.csdn.net/weixin_46211269/article/details/119553344?spm=1001.2014.3001.5501")
    # Click text=0 点赞 >> a
    page1.click("text=0 点赞 >> a")
    # Click img[alt="在这里插入图片描述"]
    page1.click("img[alt=\"在这里插入图片描述\"]", button="right")
    # Click text=在model.py复制粘贴以下代码:
    page1.click("text=在model.py复制粘贴以下代码:")
    # Click .imgViewDom img
    page1.click(".imgViewDom img")
    # Close page
    page1.close()
    # Close page
    page.close()
    # ---------------------
    context.close()
    browser.close()
with sync_playwright() as playwright:
    run(playwright)

你可以把文件名引号去掉,用这个代码运行,他则会执行相同的操作。

那么大家是不是还好奇如何分别使用同步和异步?

那么问题来了,我先贴个我的群:970353786hhhh继续发车

由于这个生成代码如此之快,万一被发现怎么办?于是我想让他慢一点,比如这个火狐浏览器,使用slow_mo让他慢下来,而不能再用timeout,也不能用time . sleep (5) 来休息,而是可以用page.wait_for_timeout (5000)来代替,headless=False则表示无头模式

firefox.launch(headless=False, slow_mo=50)

直接说哦异步,因为同步我们已经写的太多了,如下就是异步的最简demo

import asyncio
from playwright.async_api import async_playwright
async def main():
    async with async_playwright() as p:
        browser = await p.chromium.launch(headless=False)
        await browser.close()
asyncio.run(main())

浏览器环境中也可以用来模拟多页场景涉及到移动设备,权限,语言环境和配色方案.比如:

import asyncio
from playwright.async_api import async_playwright
async def main():
    async with async_playwright() as p:
        iphone_11 = p.devices['iPhone 11 Pro']
        browser = await p.chromium.launch()
        context = await browser.new_context(
            **iphone_11,
            locale='de-DE',
            geolocation={ 'longitude': 12.492507, 'latitude': 41.889938 },
            permissions=['geolocation'],
            color_scheme='dark',
        )
        page = await browser.new_page()
        await browser.close()
asyncio.run(main())

浏览器中可以有多个页面。 一个 页面 是指一个标签或一个弹出窗口在浏览器中上下文。 它应该被用来导航到url页面内容并与之交互。比如以下代码,这是demo,你得根据你需要的网址进行修改,example.com则为demo

page = await context.new_page()
# Navigate explicitly, similar to entering a URL in the browser.
await page.goto('http://example.com')
# Fill an input.
await page.fill('#search', 'query')
# Navigate implicitly by clicking a link.
await page.click('#submit')
# Expect a new url.
print(page.url)
# Page can navigate from the script - this will be picked up by Playwright.
# window.location.href = 'https://example.com'

操作实在太多,不再继续演示了,如果你英文可以,可以看看上面的参考文档,这工具也是实在牛逼,爽爆了!

相关文章
|
2月前
|
Python
自动化微信朋友圈:Python脚本实现自动发布动态
本文介绍如何使用Python脚本自动化发布微信朋友圈动态,节省手动输入的时间。主要依赖`pyautogui`、`time`、`pyperclip`等库,通过模拟鼠标和键盘操作实现自动发布。代码涵盖打开微信、定位朋友圈、准备输入框、模拟打字等功能。虽然该方法能提高效率,但需注意可能违反微信使用条款,存在风险。定期更新脚本以适应微信界面变化也很重要。
213 61
|
22天前
|
人工智能 开发者 Python
Chainlit:一个开源的异步Python框架,快速构建生产级对话式 AI 应用
Chainlit 是一个开源的异步 Python 框架,帮助开发者在几分钟内构建可扩展的对话式 AI 或代理应用,支持多种工具和服务集成。
137 9
|
2月前
|
人工智能 Linux API
PromptWizard:微软开源 AI 提示词自动化优化框架,能够迭代优化提示指令和上下文示例,提升 LLMs 特定任务的表现
PromptWizard 是微软开源的 AI 提示词自动化优化框架,通过自我演变和自我适应机制,迭代优化提示指令和上下文示例,提升大型语言模型(LLMs)在特定任务中的表现。本文详细介绍了 PromptWizard 的主要功能、技术原理以及如何运行该框架。
248 8
PromptWizard:微软开源 AI 提示词自动化优化框架,能够迭代优化提示指令和上下文示例,提升 LLMs 特定任务的表现
|
2月前
|
人工智能 JSON 数据管理
ShowUI:新加坡国立联合微软推出用于 GUI 自动化的视觉-语言-操作模型
ShowUI是由新加坡国立大学Show Lab和微软联合推出的视觉-语言-行动模型,旨在提升图形用户界面(GUI)助手的效率。该模型通过UI引导的视觉令牌选择和交错视觉-语言-行动流,有效减少计算成本并提高训练效率。ShowUI在小规模高质量数据集上表现出色,展现出在GUI自动化领域的潜力。
110 4
ShowUI:新加坡国立联合微软推出用于 GUI 自动化的视觉-语言-操作模型
|
3月前
|
人工智能 API 开发工具
aisuite:吴恩达发布开源Python库,一个接口调用多个大模型
吴恩达发布的开源Python库aisuite,提供了一个统一的接口来调用多个大型语言模型(LLM)服务。支持包括OpenAI、Anthropic、Azure等在内的11个模型平台,简化了多模型管理和测试的工作,促进了人工智能技术的应用和发展。
226 1
aisuite:吴恩达发布开源Python库,一个接口调用多个大模型
|
2月前
|
敏捷开发 测试技术 持续交付
自动化测试之美:从零开始搭建你的Python测试框架
在软件开发的马拉松赛道上,自动化测试是那个能让你保持节奏、避免跌宕起伏的神奇小助手。本文将带你走进自动化测试的世界,用Python这把钥匙,解锁高效、可靠的测试框架之门。你将学会如何步步为营,构建属于自己的测试庇护所,让代码质量成为晨跑时清新的空气,而不是雾霾中的忧虑。让我们一起摆脱手动测试的繁琐枷锁,拥抱自动化带来的自由吧!
|
3月前
|
监控 安全 测试技术
在实施自动化和持续集成的过程中,如何确保代码的安全性和合规性
在自动化和持续集成中,确保代码安全与合规至关重要。措施包括集成自动化安全工具、执行自动化合规检查、进行代码质量与安全检测、评估开源代码安全、实施基础设施即代码的安全标准、采用多层防御策略、加强安全教育与文化建设、使用合规性检测工具及许可证合规分析等,共同提升代码安全性与合规水平。
|
3月前
|
运维 监控 网络安全
自动化运维的崛起:如何利用Python脚本简化日常任务
【10月更文挑战第43天】在数字化时代的浪潮中,运维工作已从繁琐的手工操作转变为高效的自动化流程。本文将引导您了解如何运用Python编写脚本,以实现日常运维任务的自动化,从而提升工作效率和准确性。我们将通过一个实际案例,展示如何使用Python来自动部署应用、监控服务器状态并生成报告。文章不仅适合运维新手入门,也能为有经验的运维工程师提供新的视角和灵感。
|
3月前
|
监控 安全 测试技术
在实施自动化和持续集成的过程中,如何确保代码的安全性和合规性?
在实施自动化和持续集成的过程中,如何确保代码的安全性和合规性?
|
3月前
|
运维 监控 Python
自动化运维:使用Python脚本简化日常任务
【10月更文挑战第36天】在数字化时代,运维工作的效率和准确性成为企业竞争力的关键。本文将介绍如何通过编写Python脚本来自动化日常的运维任务,不仅提高工作效率,还能降低人为错误的风险。从基础的文件操作到进阶的网络管理,我们将一步步展示Python在自动化运维中的应用,并分享实用的代码示例,帮助读者快速掌握自动化运维的核心技能。
147 3

推荐镜像

更多