

背景：  
selenium初心者です  
あるサイトの情報取得のためにseleniumを利用しているのですが  
ブラウザ表示時には正常に情報取得ができていたにも関わらず、ヘッダレス モードで実行した場合には下記のエラーが発生し、情報取得が不可となりました

質問内容：  
seleniumブラウザ表示時とヘッダレス動作時に挙動が異なる場合の切り分け方法について  
皆さんはどのように行われているのでしょうか。（当方ではエラー発生時のスクリーンショット取得くらいしか思い付かず、切り分けが難航しております）

環境：  
Python 3.6  
Selenium 3.141.0  
Chrome Driver 74.0.3729.108

補足：  
エラー時のスクリーンショットを確認したところ、ヘッダレス 動作時には  
商品ページにアクセスしようとした際に、ログインページにリダイレクトされていました。  
そのため、リダイレクトした際には初回ログイン成功時のcookieを追加するようにしたのですが  
上手く情報が取得できる場合とそうでない場合がありました。（初学者となり、この方法が間違っているかも知れませんが、その点についても誤りがあればご指摘願います。）

コード一部抜粋：

[code]

                for item_link in item_links:
                    try:
                        print('open {0}'.format(item_link))
                        self.browser.get(item_link)
                        if self.browser.current_url != item_link:
                            self.browser.get(item_link)
    
                        WebDriverWait(self.browser, 10).until(
                            EC.presence_of_element_located((By.ID, 'container_img')))
                        store_data.append(_get_product_info(item_link))
                    except:
                        #ログインページにリダイレクトした場合にcookieを追加
                        print('[ERROR02] exec retry')
                        self.browser = cookie.addCookie(self.browser)
    
                        print('open {0}'.format(item_link))
                        self.browser.get(item_link)
                        print(self.browser.title)
    
                        WebDriverWait(self.browser, 10).until(
                            EC.presence_of_element_located((By.ID, 'container_img')))
                        store_data.append(_get_product_info(item_link))
                    print(store_data)
    
[/code]

エラー内容：

[code]

    [ERROR02] exec retry
    Traceback (most recent call last):
      File "/03_hira/src/pages/StyleIsNow.py", line 197, in read_category_page
        self.browser.get(item_link)
      File "/Users/ipap/.pyenv/versions/3.6.5/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 333, in get
        self.execute(Command.GET, {'url': url})
      File "/Users/ipap/.pyenv/versions/3.6.5/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
        self.error_handler.check_response(response)
      File "/Users/ipap/.pyenv/versions/3.6.5/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
        raise exception_class(message, screen, stacktrace)
    selenium.common.exceptions.TimeoutException: Message: timeout
      (Session info: headless chrome=74.0.3729.108)
      (Driver info: chromedriver=74.0.3729.6 (255758eccf3d244491b8a1317aa76e1ce10d57e9-refs/branch-heads/3729@{#29}),platform=Mac OS X 10.14.4 x86_64)
    
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
      File "/03_hira/src/pages/StyleIsNow.py", line 239, in <module>
        style.read_category_page(sex_category, product_category)
      File "/03_hira/src/pages/StyleIsNow.py", line 207, in read_category_page
        self.browser = cookie.addCookie(self.browser)
      File "/03_hira/src/utils/Cookie.py", line 32, in addCookie
        self.browser.add_cookie(cookie)
      File "/Users/ipap/.pyenv/versions/3.6.5/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 894, in add_cookie
        self.execute(Command.ADD_COOKIE, {'cookie': cookie_dict})
      File "/Users/ipap/.pyenv/versions/3.6.5/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
        self.error_handler.check_response(response)
      File "/Users/ipap/.pyenv/versions/3.6.5/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
        raise exception_class(message, screen, stacktrace)
    selenium.common.exceptions.TimeoutException: Message: timeout
      (Session info: headless chrome=74.0.3729.108)
      (Driver info: chromedriver=74.0.3729.6 (255758eccf3d244491b8a1317aa76e1ce10d57e9-refs/branch-heads/3729@{#29}),platform=Mac OS X 10.14.4 x86_64)
    
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
      File "/03_hira/src/pages/StyleIsNow.py", line 242, in <module>
        browser.quit()
      File "/Users/ipap/.pyenv/versions/3.6.5/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 1055, in save_screenshot
        return self.get_screenshot_as_file(filename)
      File "/Users/ipap/.pyenv/versions/3.6.5/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 1032, in get_screenshot_as_file
        png = self.get_screenshot_as_png()
      File "/Users/ipap/.pyenv/versions/3.6.5/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 1064, in get_screenshot_as_png
        return base64.b64decode(self.get_screenshot_as_base64().encode('ascii'))
      File "/Users/ipap/.pyenv/versions/3.6.5/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 1074, in get_screenshot_as_base64
        return self.execute(Command.SCREENSHOT)['value']
      File "/Users/ipap/.pyenv/versions/3.6.5/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
        self.error_handler.check_response(response)
      File "/Users/ipap/.pyenv/versions/3.6.5/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
        raise exception_class(message, screen, stacktrace)
    selenium.common.exceptions.TimeoutException: Message: timeout
      (Session info: headless chrome=74.0.3729.108)
      (Driver info: chromedriver=74.0.3729.6 (255758eccf3d244491b8a1317aa76e1ce10d57e9-refs/branch-heads/3729@{#29}),platform=Mac OS X 10.14.4 x86_64)
    
[/code]


CC BY-SA 4.0
2019-04-30T03:46:29.417
54594
2021-08-04T09:07:20.573
2019-04-30T05:09:29.803
76
34125
question
python3 selenium web-scraping selenium-webdriver chromedriver
ブラウザ表示とヘッダレスモードで動作が異なる場合の切り分けについて


[Headless
Chromeでにっちもさっちもいかないとき](https://qiita.com/grohiro/items/718239cdd36da42bd517)
とか [headless chromeをpythonで動かしてみた](https://hacknote.jp/archives/48685/)
が参考になるのでは？

以下、前者のリンクからウィンドウサイズを調整するオプションを引用

> ## ウインドウサイズを大きくする
>
> ウインドウサイズが小さいとHTMLが崩れたりDOM要素が重なったりして意図しない結果になることがある。
[code]

    options = Selenium::WebDriver::Chrome::Options.new({
      args: ['headless', 'start-maximized', 'window-size=1920,1080'],
    })
    
[/code]

* * *

この投稿は @kunif
さんの[コメント](https://ja.stackoverflow.com/questions/54594/#comment58376_54594)などを元に編集し、[コミュニティWiki](https://ja.meta.stackoverflow.com/q/1583)として投稿しました。


CC BY-SA 4.0
2021-03-07T06:12:06.717
74479
2021-03-07T06:12:06.717
9820
54594
answer