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
(ドエスタ)
(ドエスタ)
ぺんぞうさん、Webスクレイピングもお願いします
ぺんぞう
そう、じゃった。もう少し待ってくれよぃ
コメント