1. 程式人生 > 其它 >【python】Playwright基本用法

【python】Playwright基本用法

1. 官網

https://playwright.dev/docs/intro

2. github

https://github.com/microsoft/playwright-python

3. 安裝

# 安裝playwright庫
pip install playwright

# 安裝瀏覽器驅動檔案(安裝過程稍微有點慢)
python -m playwright install

4. 安裝瀏覽器驅動,確實有點慢

PS E:\autotest> python -m playwright install
Downloading Playwright build of chromium v965416 
- 102.8 Mb [== ] 9% 2128.1s

5. help

PS E:\autotest> playwright --help
Usage: playwright [options] [command]

Options:
  -V, --version                          output the version number
  -h, --help                             display help for command

Commands:
  open [options] [url]                   open page in browser specified via -b
, --browser codegen [options] [url] open page and generate code for user actions install [options] [browser...] ensure browsers necessary for this version of Playwright are installed install-deps [options] [browser...] install dependencies necessary to run browsers (will ask for
sudo permissions) cr [options] [url] open page in Chromium ff [options] [url] open page in Firefox wk [options] [url] open page in WebKit screenshot [options] <url> <filename> capture a page screenshot pdf [options] <url> <filename> save page as pdf show-trace [options] [trace...] Show trace viewer help [command] display help for command

6. codegen help

PS E:\autotest> python -m playwright codegen --help
Usage: 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"
  --proxy-bypass <bypass>      comma-separated domains to bypass proxy, for example ".com,chromium.org,.domain.com"
  --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

6. 生成python指令碼

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

7. python指令碼

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 input[name="wd"]
    page.locator("input[name=\"wd\"]").click()

    # Fill input[name="wd"]
    page.locator("input[name=\"wd\"]").fill("ewu")

    # Press Enter
    # with page.expect_navigation(url="https://www.baidu.com/s?ie=utf-8&f=3&rsv_bp=1&rsv_idx=1&tn=baidu&wd=%E4%BF%84%E4%B9%8C%E5%86%B2%E7%AA%81&fenlei=256&rsv_pq=bcbe1f630001b2d8&rsv_t=8815Rknx8geggPHol8NEtStIzoya5ssaRAwypM%2BIoJi48q15YIyXvmbOPAc&rqlang=cn&rsv_dl=ts_1&rsv_enter=1&rsv_sug3=10&rsv_sug1=11&rsv_sug7=100&rsv_sug2=0&rsv_btype=i&prefixsug=ewu&rsp=1&inputT=15942&rsv_sug4=19327&rsv_jmp=fail"):
    with page.expect_navigation():
        page.locator("input[name=\"wd\"]").press("Enter")
    # assert page.url == "https://www.baidu.com/s?ie=utf-8&f=3&rsv_bp=1&rsv_idx=1&tn=baidu&wd=%E4%BF%84%E4%B9%8C%E5%86%B2%E7%AA%81&fenlei=256&rsv_pq=bcbe1f630001b2d8&rsv_t=8815Rknx8geggPHol8NEtStIzoya5ssaRAwypM%2BIoJi48q15YIyXvmbOPAc&rqlang=cn&rsv_dl=ts_1&rsv_enter=1&rsv_sug3=10&rsv_sug1=11&rsv_sug7=100&rsv_sug2=0&rsv_btype=i&prefixsug=ewu&rsp=1&inputT=15942&rsv_sug4=19327"

    # Click text=俄烏局勢 >> nth=0
    page.locator("text=俄烏局勢").first.click()

    # Close page
    page.close()

    # ---------------------
    context.close()
    browser.close()


with sync_playwright() as playwright:
    run(playwright)

參考連結:

https://juejin.cn/post/6906866546094637064

https://www.cnblogs.com/sanyvaelailai/p/14688189.html

https://www.testim.io/blog/puppeteer-selenium-playwright-cypress-how-to-choose/