Playwright for Python でウェブサイトのスクリーンショット(画像形式)を取得するのではなく「PDF 形式で」取得したいこともあると思う(実際に最近あった〜).Playwright for Python では page.pdf()
を使えば簡単に実装できる❗️
そして page.pdf()
はデフォルトで「印刷用 CSS : @media print
」を認識してくれるため,ウェブサイト側のデザインに沿って "整って" 表示された PDF を取得できる.
page.pdf()
デフォルトの用紙サイズは Letter
なので format
オプションで A4
など適切な用紙サイズを指定しておくのが良いと思う.
page.pdf(path='pdf/print.pdf', format='A4')
page.emulate_media()
+ page.pdf()
もし @media print
ではなく @media screen
で PDF を取得する場合は page.pdf()
の前に page.emulate_media()
でメディアを変更しておく必要がある.
page.emulate_media(media='screen') page.pdf(path='pdf/screen.pdf', format='A4')
試す
今回はサンプルとして,MDN のドキュメントを @media print
と @media screen
それぞれで PDF 化した「1ページ目」を載せておく.MDN のドキュメントだと大きな差はないけど「ヘッダー部分」は @media print
にはなく,ある程度は "整って" 表示されていると思う👌
今回試したサンプルコード
from playwright.sync_api import sync_playwright with sync_playwright() as p: browser = p.chromium.launch() page = browser.new_page() page.goto('https://developer.mozilla.org/ja/docs/Web/CSS/@media') page.pdf(path='pdf/print.pdf', format='A4') page.emulate_media(media='screen') page.pdf(path='pdf/screen.pdf', format='A4') browser.close()