0
3

More than 1 year has passed since last update.

【Python】Webスクレイピングで環境によって期待結果が異なる件への対応(Edge)

Last updated at Posted at 2023-04-21

事象

あるサービスから、WebスクレイピングしてデータをExcelに出力するプログラムを作ってる時、実行環境や実行タイミングによって、Excelに出力された値が異なる事象が発生。
データを取得する画面は、同じで、一度発生するとその特定のレコードが毎回画面上の値と異なって出力される。
当記事は、この問題に対する調査記録。

事象整理

まずは事実を整理。

  • 実行する環境(PC)によって、Excelに出力された値(取得された値)が異なる事象が発生する
  • 事象が発生するデータと同じ画面から取得したデータは、そのような事象は発生しない
    ⇒画面項目差異による影響ではない
  • デバッグ実行しながらであれば、事象は発生しない(通しで実行した時にのみ発生する)
    ⇒プログラムが悪さしているわけではなさそう
  • 事象が発生するデータのみを対象にすると事象は発生しない
    ⇒対象データが悪いわけではない
  • ヘッドレスモードで起動したときは正常に取得される
    (ようにみえる。タイミングによって発生する可能性があるため)
    ⇒プログラムが悪さしているわけではなさそう

プログラムの内容

プログラムが原因ではなさそうなので、Seleniumに関わる箇所のみにフォーカスする。

  • SeleniumWebDriverの起動オプションは以下。
            options = EdgeOptions()
            options.use_chromium = True
            options.add_argument('--no-sandbox')
            options.add_argument('--disable-gpu')
            options.add_experimental_option('excludeSwitches', ['enable-logging'])
            options.add_argument("--inprivate")
            options.add_argument("--disable-cache")
    
  • 不完全なページのロードを回避するため、画面遷移後に3秒待機。
    また、implicity_waitを設定し、上記で3秒待機後に画面最下部の要素が発見されてから処理を実行
  • 画面遷移はSeleniumWebdriver、データの取得はBeautifulSoupを利用

試したこと

事象発生の要因に対して、それぞれ調査。

  1. 【仮説1】ページがロードしきってない状態で処理が走ってしまった?
    【アプローチ】画面遷移後の待機時間を6秒に延長してみる
    【結果】事象解消せず。次の仮設を検証してみる。

  2. 【仮説2】処理中にたまったゴミが悪さをしている?
    【アプローチ】webdriverの利用ディレクトリを指定して、どんな感じかを観察してみる。
           EdgeOptionsに以下を設定。

    options.add_argument("user-data-dir=D:\\SeleniumTest\\")
    

    【結果】特に怪しい箇所なし。次の仮設を検証してみる。
      →結果、変わらず。また、処理終了後に上記ディレクトリのデータも消えなかった。

  3. 【仮説3】Edgeの拡張機能が悪さをしてたりする?
    【アプローチ】拡張機能が悪さしている可能性もあるので、無効にして起動してみる
           EdgeOptionsに以下を設定。

    options.add_argument("--disable-extensions")
    

    【結果】結果変わらず。

結論

色々試したけど、画面表示しながら事象を解消することはできず!

画面表示していることでリソースを消費して、画面のロードに不都合が発生しているのかも・・・
ヘッドレスモードで起動することで今のところちゃんと出力されそうなので、こちらで対応することにする。

0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3