pyppeteerを使ってクローリングする際、「JSを実行して値を取り出す」ため、セキュリティのための制限にひっかかることが割とあるようです。
私の場合、CSSの情報を取り出す際に、以下の問題に引っかかりました。
> document.styleSheets[0].cssRules VM52621:1 Uncaught DOMException: Failed to read the 'cssRules' property from 'CSSStyleSheet': Cannot access rules at <anonymous>:1:25
一部のブラウザーでは、スタイルシートが異なるドメインから読み込まれている場合、cssRules の呼び出しで SecurityError が発生します。
自分や自社が管理するサイトの開発時のE2Eテストのような要件であればCORS (Cross-Origin Resource Sharing)の設定で対処できそうなのですが、私の場合はクローリングの案件だったのでその方法は使えません。Headless Chromeの起動オプションで指定できるそうなのでそちらで対処しました。
上の記事ではpuppeteer(pyppeteerの元ネタのnode.jsのライブラリ)の話題ですが、pyppeteerでもほとんど同様に操作できます。
from pyppeteer import launch async def main(): browser = await launch(headless=True, args=['--disable-web-security']) # 以下、操作
小規模で、信頼できるサイトのクローリングならこれで問題ないと思っています。