• python工具——playwright


    playwright是微软开源的自动化项目

    git地址  https://github.com/microsoft/playwright-python

    官网  https://playwright.dev/

    安装

    pip install playwright

    查看支持的功能

     python -m playwright -h
    Usage: index [options] [command]
    
    Options:
      -V, --version                          output the version number
      -b, --browser <browserType>            browser to use, one of cr, chromium, ff, firefox, wk, webkit (default: "chromium")
      --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"
      --lang <language>                      specify language / locale, for example "en-GB"
      --load-storage <filename>              load context storage state from the file, previously saved with --save-storage
      --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
    
    Commands:
      open [url]                             open page in browser specified via -b, --browser
      cr [url]                               open page in Chromium
      ff [url]                               open page in Firefox
      wk [url]                               open page in WebKit
      codegen [options] [url]                open page and generate code for user actions
      screenshot [options] <url> <filename>  capture a page screenshot
      pdf [options] <url> <filename>         save page as pdf
      install                                Ensure browsers necessary for this version of Playwright are installed
      help [command]                         display help for command

    下载 Chromeium、Firefox、Safari(WebKit)浏览器驱动

    python -m playwright install

     注:

      如果执行命令时下载Chromeium后就报错,如下

    Removing unused browser at C:UsersAdministratorAppDataLocalms-playwrightchromium-833159

    (node:4392) UnhandledPromiseRejectionWarning: Error: EPERM: operation not permitted, open 'C:UsersAdministratorAppDataLocalms-playwrightchromium-833159chrome-winchrome_elf.dll'
    (node:4392) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
    (node:4392) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

      解决方法:

    https://github.com/microsoft/playwright-python 上 local-requirements.txt,安装python库

    autobahn==20.7.1
    pytest==6.1.0
    pytest-asyncio==0.14.0
    pytest-cov==2.10.1
    pytest-sugar==0.9.4
    pytest-xdist==2.1.0
    pytest-timeout==1.4.2
    flaky==3.7.0
    pixelmatch==0.2.1
    Pillow==8.0.0
    mypy==0.782
    setuptools==50.3.0
    # TODO: use PyPi version after >20.3.0 is released
    git+https://github.com/twisted/twisted.git@4ff22287cab3b54f51cee41ea2619e72d1bff2e4
    wheel==0.35.1
    black==20.8b1
    pre-commit==2.7.1
    flake8==3.8.3
    twine==3.2.0
    pyOpenSSL==19.1.0
    service_identity==18.1.0
    pdoc3==0.9.1

    再执行

    $ python -m playwright install
    Removing unused browser at C:UsersAdministratorAppDataLocalms-playwrightchromium-833159
    
    chromium v833159 downloaded to C:UsersAdministratorAppDataLocalms-playwrightchromium-833159
    
    firefox v1221 downloaded to C:UsersAdministratorAppDataLocalms-playwrightfirefox-1221
    
    webkit v1402 downloaded to C:UsersAdministratorAppDataLocalms-playwrightwebkit-1402

    1.同步

    from playwright import sync_playwright
    
    with sync_playwright() as p:
        browser_type = p.chromium
        browser = browser_type.launch(headless=False)
        page = browser.newPage()
        page.goto('https://www.baidu.com/')
        page.screenshot(path=f'{browser_type.name}.png')
        browser.close()

    2.异步

    import asyncio
    from playwright import async_playwright
    
    async def main():
        async with async_playwright() as p:
                browser_type = p.chromium
                browser = await browser_type.launch(headless=False)
                page = await browser.newPage()
                await page.goto('https://www.baidu.com/')
                await page.screenshot(path=f'{browser_type.name}1.png')
                await browser.close()
    asyncio.get_event_loop().run_until_complete(main())

     3.手机模式

    from playwright import sync_playwright
    
    with sync_playwright() as p:
        phone_name = 'iPhone 11 Pro'
        iphone_11 = p.devices[phone_name]
        browser = p.webkit.launch(headless=False)
        context = browser.newContext(
            **iphone_11,
            locale='zh-CN'
        )
        page = context.newPage()
        page.goto('https://map.baidu.com/mobile/webapp/index/index/')
        page.screenshot(path=f'{phone_name}.png')
        browser.close()

    4.录制脚本

    使用命令 codegen

    命令格式

    $ python -m playwright codegen -h
    Usage: index 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 use, one of javascript, python,
                                python-async, csharp (default: "python")
      -h, --help                display help for command
    
    Examples:
    
      $ codegen
      $ codegen --target=python
      $ -b webkit codegen https://example.com

    eg:

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

    my1.py

    from playwright import sync_playwright
    
    def run(playwright):
        browser = playwright.chromium.launch(headless=False)
        context = browser.newContext()
    
        # Open new page
        page = context.newPage()
    
        # Go to https://www.baidu.com/
        page.goto("https://www.baidu.com/")
    
        # Click input[name="wd"]
        page.click("input[name="wd"]")
    
        # Fill input[name="wd"]
        # with page.expect_navigation(url="https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=hello&fenlei=256&rsv_pq=e1fa5e4c0000d5a6&rsv_t=577f7bNmG1aOHBEWyQJLIfxHSyytPL7Q1GczIkdkkSwbPsx3vLC%2FGKkrqQE&rqlang=cn&rsv_enter=1&rsv_dl=tb&rsv_sug3=6&rsv_sug1=4&rsv_sug7=100&rsv_sug2=0&rsv_btype=i&prefixsug=hello&rsp=5&inputT=1909&rsv_sug4=3707"):
        with page.expect_navigation():
            page.fill("input[name="wd"]", "hello")
    
        # Close page
        page.close()
    
        # ---------------------
        context.close()
        browser.close()
    
    with sync_playwright() as playwright:
        run(playwright)
  • 相关阅读:
    ExtJs 4 的filefield上传后 返回值success接受不正常
    winform treeview 通过节点名称添加子节点
    Live Writer Test
    mysqlcluster笔记
    ExtJS中form提交之后获取返回的json值
    MYSQL大小写(由于数据由windows迁移到Linux导致)
    ORACLE分科目统计每科前三名的学生的语句
    一列数据横排显示
    Oracle11g使用exp导出空表
    myeclipse2015卸载、安装、破解全过程-----myeclipse2015
  • 原文地址:https://www.cnblogs.com/baby123/p/14240938.html
Copyright © 2020-2023  润新知