【2023年】Python Playwrightで自動テストしてみよう(3) url読み込み / SafariとFireFox

PythonPlaywrightで自動テスト3-URLとBrowser Playwright
doestar<br>(ドエスタ)
doestar
(ドエスタ)

ぺんぞうさん、前回おかげさまでエラー解決できました。ありがとうございます。

そして、またまたお願いです。

① URLを引数など外部から読み込む方法を教えて下さい

  複数のWebサイトが開くかどうかなどまとめてテストしたいケースがあるんですわ。

② SafariやFirefoxブラウザーでテストする方法教えてください。

 私はChrome派ですが、Mac使ってる友達はSafariでテストしたがってるんですよね~

あと、なじみのあるmain文で書いてくれると、、、

ぺんぞう
ぺんぞう

やりたいことを自分で見つけて、しかもプログラミングを一緒に学ぶ友達までできたのか!

その調子じゃ。

複数URLの読み込みは、今後まなぶWebスクレイピングでも必須になるぞい。

難しくないので、ぜひ今回学んで自分のものにするのじゃ。

1. 解説

1.1. 実行概要

いきなりですが、こちらが実行結果の画面です。

Safari → Firefox → Chrome → Edgeの順番に前回テスト内容を実行しています。

PlaywrightのGithub ドキュメント(こちら)を見る限りEdgeは対応してませんでした。
ブラウザー名をみてEdgeの場合は、NGを返すようにしています。

1.2 引数指定 (url, browser_type)

Playwright実行関数に、URLとブラウザー名とPlaywrightの引数としてしてすればOKです。

# (例)
from playwright.sync_api import Playwright, sync_playwright, expect

# 実行関数
def run(playwright: Playwright, url, browser_name):
    # Launch browser
    print(f'browser: {browser_name}')

#------------------------------------

# main関数
if __name__ == "__main__": 
    # URL指定
    url = 'https://www.doestarian.com/static/test.html' 

    # Browser指定
    browser_name = 'safari'
                 
    # Playwright 実行
    with sync_playwright() as playwright:
         result = run(playwright, url, browser_name)


1.3 ブラウザー別起動方法 (Chrome / Safari / Firefox )

ブラウザー名を変えるだけでOKです。

# Chrome 
browser = playwright.chromium.launch()

# Safari(Webkit)
browser = playwright.webkit.launch()

# Firefox
browser = playwright.firefox.launch()

2. 完成形

こちらが完成のコードです。

from playwright.sync_api import Playwright, sync_playwright, expect

def run(playwright: Playwright, url, browser_name):
    # Launch browser
    print(f'browser: {browser_name}')
    if browser_name == 'chrome':
        browser = playwright.chromium.launch(headless=False)
    elif browser_name == 'safari':
        browser = playwright.webkit.launch(headless=False)
    elif browser_name == 'firefox':
        browser = playwright.firefox.launch(headless=False)
    else:
        print(f'{browser_name} is not supported!')
        return 'NG'
    context = browser.new_context()

    # Open new page
    page = context.new_page()
    # Go to url
    page.goto(url,wait_until='commit')
    
    page.wait_for_timeout(1000)

    # Click text=Doestarian BlogのTopページへ
    page.locator("text=Doestarian BlogのTopページへ").click()
    # page.wait_for_url("https://www.doestarian.com/",wait_until='commit')
    
    page.wait_for_timeout(3000)
    
    result = 'OK'
    
    # Close page
    page.close()

    # ---------------------
    context.close()
    browser.close()
    
    return 'OK'


if __name__ == "__main__": 
    # URL指定
    url = 'https://www.doestarian.com/static/test.html' 
    
    # safari(webkit) -> firefox -> chrome -> edge の順にテスト
    browsers = ['safari','firefox','chrome','edge']  
    for browser_name in browsers:
                
        # Playwright 実行
        with sync_playwright() as playwright:
            result = run(playwright, url, browser_name)

        # 結果出力
        print(f'{browser_name} test => Result : {result}  URL:{url}')

こちらが実行結果とデモ画面です。

参考

https://github.com/microsoft/playwright (Documentation | API reference)

doestar<br>(ドエスタ)
doestar
(ドエスタ)

ぺんぞうさん、Webスクレイピングもお願いします

ぺんぞう
ぺんぞう

そう、じゃった。もう少し待ってくれよぃ

<< Playwright道場
< Prev

コメント

タイトルとURLをコピーしました