Playwright


什么是 playwright ?

playwright 的官網兼文檔
目前我的理解是,很牛逼的自動網絡執行工具,可以手工實現腳本,也可以實現錄制腳本,可用的語言也包括 nodejs、python 等

它自帶的瀏覽器有:chromium、firefox、webkit
它自帶的軟件有:ffmpeg,是一套可以用來記錄、轉換數字音頻、視頻,並能將其轉化為流的開源計算機程序

PS:webkit 是一個開源的瀏覽器引擎,主要用於 Safari,以往微軟把 IE 捆綁在 Windows 里(同樣的 Webkit 內核的 Safari 捆綁在 Apple 產品里,Chrome 捆綁在 Google 產品里)

為什么我要學 playwright ?

說來話長,我本來在學 QR code,然后有不理解的內容,上網搜資料,一路就搜到 playwright 了,總之我想用它試試看爬蟲的效果,順便就用它自動填寫健康卡填報吧

步驟

使用終端:PowerShell

# 升級 pip
python -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade pip

# 切換清華源
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

作用:python下載庫會的很快(pip install xxx)

  • 安裝 PlayWright
# 安裝playwright庫
pip install playwright

# 安裝瀏覽器驅動文件(安裝過程稍微有點慢)
python -m playwright install
  • 切換到目標目錄,創建 py 文件
cd C:\Users\xxx\Desktop
New-Item test.py
  • 要在目標網站搜索,用 chromium 驅動,將結果保存為 test.pypython 文件
python -m playwright codegen --target python -o 'test.py' -b chromium https://xxx/index.html

實戰(自動填寫健康卡填報)

所用到的:playwright + Github Action

所參考的:Playwright(知乎)+ Github Actions實現網站自動簽到(B站)+ 方糖(知乎)

python -m playwright codegen --target python -o tt.py -b chromium https://my.zcst.edu.cn/_web/sopplus/sopplus/index.html

① 首先建立一個 Github 項目

創建好后,把自己的腳本放上去(我這里包括方糖的腳本)

  • 自動填寫健康卡填報腳本
from playwright.sync_api import Playwright, sync_playwright
import sys
import time

username = sys.argv[1]
password = sys.argv[2]

def run(playwright: Playwright) -> None:
    browser = playwright.chromium.launch(headless=False)
    context = browser.new_context()
    page = context.new_page()
    page.goto("https://my.zcst.edu.cn/_web/sopplus/sopplus/index.html")
    page.goto("https://authserver.zcst.edu.cn/cas/login?service=https%3A%2F%2Fmy.zcst.edu.cn%2FportalRedirect.jsp%3F_p%3DYXM9MSZwPTEmbT1OJg__")
    page.click("[placeholder=\"用戶名/手機號/郵箱\"]")
    page.fill("[placeholder=\"用戶名/手機號/郵箱\"]", username)
    page.click("[placeholder=\"密碼\"]")
    page.fill("[placeholder=\"密碼\"]", password)
    page.click("text=登 錄")
    with page.expect_popup() as popup_info:
        page.click("text=健康卡填報")
    page1 = popup_info.value
    time.sleep(5)
    with page1.expect_popup() as popup_info:
        page1.click("text=我要辦理")
    page2 = popup_info.value
    time.sleep(5)
    page2.click("text=為了全力做好學校新型冠狀病毒感染的肺炎疫情防控工作,我承諾以下內容填寫屬實。 30s 已閱讀並同意 >> ins")
    page2.click("text=下一步")
    page2.click("input[name=\"xjzdz\"]")
    page2.fill("input[name=\"xjzdz\"]", "廣東省珠海市XX區XX")
    page2.click("textarea[name=\"jqqx\"]")
    page2.fill("textarea[name=\"jqqx\"]", "廣東省珠海市XX區XX")
    page2.click("#radio_sfqwhb3 ins")
    page2.click("#radio_sfjwhy11 ins")
    page2.click("text=在校內居住 >> ins")
    page2.click("input[name=\"jtdz\"]", modifiers=["Control"])
    page2.fill("input[name=\"jtdz\"]", "竹X, XX")
    page2.click("text=綠色 >> ins")
    page2.click("input[name=\"jrtw\"]")
    page2.fill("input[name=\"jrtw\"]", "36")
    page2.click("text=已完成三針接種 >> ins")
    page2.click("text=良好 >> ins")
    page2.click("text=無 >> ins")
    page2.click("text=本人承諾登記后、到校前不再前往其他地區 >> ins")
    page2.click("button:has-text(\"提交\")")
    page2.click("a:has-text(\"確定\")")
    page2.close()
    print("Successfully!")
    # ---------------------
    context.close()
    browser.close()
with sync_playwright() as playwright:
    run(playwright)
  • 成功返回微信方糖信息腳本
# coding=utf-8
import requests
import traceback
def msg_push(title, content, key):
    try:
        url = 'https://sc.ftqq.com/%s.send' % key
        requests.post(url, data={'text': title, 'desp': content})
    except Exception as e:
        traceback.format_exc()
if __name__ == '__main__':
    key = 'XXXXXXXXXXXXXXXXXXXXXXXXXX'
    msg_push('今日打卡成功', '自動填寫健康卡填報', key)

② 在 Actions secrets 設置自己的用戶名和密碼

③ 在 Actions 設置 GitHub Actions

這里我有參考 Playwright GitHub Action,但是它的那句 We recommend using Playwright CLI instead of this action. 我沒看懂

還有其中的 cron 需要注意,即執行日期
PS:我這里設置的(10 23 * * *)大概是早上 8 點 20 左右

  • main.yml
name: playwright

on:
  push:
    branches: [ main ]
  schedule:
    - cron: '10 23 * * *'

jobs:
  build:
    runs-on: windows-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: 'Set up playwright'
        uses: microsoft/playwright-github-action@v1

      - name: 'Set up node'
        uses: actions/setup-node@v1

      - name: 'Set up Python'
        uses: actions/setup-python@v1
        with:
           python-version: 3.9

      - name: 'Install requirements'
        run: pip install segno && pip install playwright && playwright install

      - name: 'Working'
        run: python ./healthware.py ${{ secrets.HEALTHWARE_USERNAME }} ${{ secrets.HEALTHWARE_PASSWORD }}

      - name: 'Successfully'
        run: python ./success.py

④ 等待執行結果即可

似乎是先立即執行一遍,之后再按時執行的 ~

PS:其實我還有其他網站的腳本,但是那些是要驗證碼的,我又不想學了,等有空再和 Selenium 庫一起細學吧 ~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM