質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

解決済

chromeDriverを使ってスクレイピングするとクラッシュする

nezuko
nezuko

総合スコア12

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

2回答

0リアクション

1クリップ

14115閲覧

投稿2019/05/14 05:45

前提・実現したいこと

python+seleniumを使って、GoogleとYahooのPCとスマホそれぞれで検索し、検索結果のソースを取得&画面全体のキャプチャを撮りたいと思っています。

発生している問題・エラーメッセージ

毎回というわけではないのですが、

<class 'selenium.common.exceptions.WebDriverException'> unknown error: session deleted because of page crash from unknown error: cannot determine loading status from tab crashed

となってしまいます。
chrome.logを見たところ、キャプチャを撮るところでエラーになっているようでした。
つい最近まではエラーもなくスムーズに動いていたのですが、エラー発生時と共に処理も遅くなったような気がします。

該当のソースコード

googlePc

python

# coding: UTF-8 from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.keys import Keys import subprocess import sys import time args = sys.argv searchWord = args[1] fileName = args[2] options = Options() options.add_argument('--no-sandbox') options.add_argument('--disable-dev-shm-usage') options.add_argument('--enable-logging') options.add_argument('--headless') options.add_argument('--disable-gpu') options.add_argument('--user-agent=Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36') driver = webdriver.Chrome(executable_path="/usr/local/bin/chromedriver",service_args=["--verbose", "--log-path=/tmp/chrome.log"],chrome_options=options) driver.set_window_size(1024, 768) try: driver.get('https://www.google.co.jp/') driver.find_element_by_name("q").send_keys(searchWord.decode('utf-8')) element = driver.find_element_by_name("q") element.send_keys(Keys.ENTER) # ページのウィンドウサイズ取得 設定 width = driver.execute_script("return document.body.scrollWidth;") height = driver.execute_script("return document.body.scrollHeight;") driver.set_window_size(width, height) # ソース取得 source = driver.page_source file = open("/tmp/temp_google_pc.txt", "w") file.write(source.encode('utf-8')) file.close() # キャプチャ time.sleep(3) driver.save_screenshot(fileName) driver.quit() except Exception as e: print('type:' + str(type(e))) print(str(e)) driver.quit()

googleSp

# coding: UTF-8 from selenium import webdriver from selenium.webdriver.chrome.options import Options import subprocess import sys import time args = sys.argv searchWord = args[1] fileName = args[2] options = Options() options.add_argument('--no-sandbox') options.add_argument('--disable-dev-shm-usage') options.add_argument('--enable-logging') options.add_argument('--headless') options.add_argument('--disable-gpu') options.add_argument('--user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1') driver = webdriver.Chrome(executable_path="/usr/local/bin/chromedriver",service_args=["--verbose", "--log-path=/tmp/chrome.log"],chrome_options=options) driver.set_window_size(652,375) try: driver.get('https://www.google.co.jp/') driver.execute_script("document.getElementsByName('q')[0].value = '" + searchWord + "'") elem_search_btn = driver.find_element_by_class_name("Tg7LZd") elem_search_btn.click() # ページのウィンドウサイズ取得 設定 width = driver.execute_script("return document.body.scrollWidth;") height = driver.execute_script("return document.body.scrollHeight;") driver.set_window_size(width, height) source = driver.page_source file = open("/tmp/temp_google_sp.txt", "w") file.write(source.encode('utf-8')) file.close() time.sleep(3) driver.save_screenshot(fileName) driver.quit() except Exception as e: print('type:' + str(type(e))) print(str(e)) driver.quit()

yahooPc

# coding: UTF-8 from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions from selenium.webdriver.common.by import By import subprocess import sys import time args = sys.argv searchWord = args[1] fileName = args[2] options = Options() options.add_argument('--no-sandbox') options.add_argument('--disable-dev-shm-usage') options.add_argument('--enable-logging') options.add_argument('--headless') options.add_argument('--disable-gpu') options.add_argument('--user-agent=Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36') driver = webdriver.Chrome(executable_path="/usr/local/bin/chromedriver",service_args=["--verbose", "--log-path=/tmp/chrome.log"],chrome_options=options) driver.set_window_size(1024, 768) try: driver.get('https://www.yahoo.co.jp/') driver.execute_script("document.getElementById('srchtxt').value = '" + searchWord + "'") elem_search_btn = driver.find_element_by_id("srchbtn") elem_search_btn.click() # ページのウィンドウサイズ取得 設定 width = driver.execute_script("return document.body.scrollWidth;") height = driver.execute_script("return document.body.scrollHeight;") driver.set_window_size(width, height) # ページのソース取得 source = driver.page_source file = open("/tmp/temp_yahoo_pc.txt", "w") file.write(driver.page_source.encode('utf-8')) file.close() time.sleep(3) driver.save_screenshot(fileName) driver.quit() except Exception as e: print('type:' + str(type(e))) print(str(e)) driver.quit()

yahooSp

# coding: UTF-8 from selenium import webdriver from selenium.webdriver.chrome.options import Options import subprocess import sys import time args = sys.argv searchWord = args[1] fileName = args[2] options = Options() options.add_argument('--no-sandbox') options.add_argument('--disable-dev-shm-usage') options.add_argument('--enable-logging') options.add_argument('--headless') options.add_argument('--disable-gpu') options.add_argument('--user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1') driver = webdriver.Chrome(executable_path="/usr/local/bin/chromedriver",service_args=["--verbose", "--log-path=/tmp/chrome.log"],chrome_options=options) driver.set_window_size(667,375) try: driver.get('https://search.yahoo.co.jp/') driver.execute_script("document.getElementsByName('p')[0].value = '" + searchWord + "'") elem_search_btn = driver.find_element_by_id("SbSbmtBtn") elem_search_btn.click() # ページのウィンドウサイズ取得 設定 width = driver.execute_script("return document.body.scrollWidth;") height = driver.execute_script("return document.body.scrollHeight;") driver.set_window_size(width, height) source = driver.page_source file = open("/tmp/temp_yahoo_sp.txt", "w") file.write(driver.page_source.encode('utf-8')) file.close() time.sleep(3) driver.save_screenshot(fileName) driver.quit() except Exception as e: print('type:' + str(type(e))) print(str(e)) driver.quit()

試したこと

  • chromeとchromeDriverを最新バージョンにアップグレード

 →変化なし

  • driver.save_screenshotの前にtime.sleepを入れてみる

  →変化なし(ちなみに5秒でもダメでした)

  • chrome_options.add_argument('--disable-dev-shm-usage') を入れてみる

 →変化なし

  • 以下を実行してみる  →変化なし
sudo mount -t tmpfs -o rw,nosuid,nodev,noexec,relatime,size=512M tmpfs /dev/shm

(参考)unknown error: session deleted because of page crash from unknown error: cannot determine loading status from tab crashed with ChromeDriver Selenium

  • 毎回pkill chromeでタスクマネージャーからchromedriverのプロセスを閉じる

 →変化なし

補足情報(FW/ツールのバージョンなど)

Google Chrome 74.0.3729.131
ChromeDriver 74.0.3729.6
Python 2.7.12

完全お手上げ状態です。
どうぞよろしくお願い致します。

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。