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

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

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

スクレイピングとは、公開されている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(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

Q&A

解決済

2回答

17447閲覧

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

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

0グッド

1クリップ

投稿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

1# coding: UTF-8 2from selenium import webdriver 3from selenium.webdriver.chrome.options import Options 4from selenium.webdriver.support.ui import WebDriverWait 5from selenium.webdriver.common.keys import Keys 6 7import subprocess 8import sys 9import time 10args = sys.argv 11 12searchWord = args[1] 13fileName = args[2] 14 15options = Options() 16options.add_argument('--no-sandbox') 17options.add_argument('--disable-dev-shm-usage') 18options.add_argument('--enable-logging') 19options.add_argument('--headless') 20options.add_argument('--disable-gpu') 21options.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') 22driver = webdriver.Chrome(executable_path="/usr/local/bin/chromedriver",service_args=["--verbose", "--log-path=/tmp/chrome.log"],chrome_options=options) 23driver.set_window_size(1024, 768) 24 25try: 26 driver.get('https://www.google.co.jp/') 27 driver.find_element_by_name("q").send_keys(searchWord.decode('utf-8')) 28 element = driver.find_element_by_name("q") 29 element.send_keys(Keys.ENTER) 30 31 # ページのウィンドウサイズ取得 設定 32 width = driver.execute_script("return document.body.scrollWidth;") 33 height = driver.execute_script("return document.body.scrollHeight;") 34 driver.set_window_size(width, height) 35 36 # ソース取得 37 source = driver.page_source 38 file = open("/tmp/temp_google_pc.txt", "w") 39 file.write(source.encode('utf-8')) 40 file.close() 41 42 # キャプチャ 43 time.sleep(3) 44 driver.save_screenshot(fileName) 45 46 driver.quit() 47 48except Exception as e: 49 print('type:' + str(type(e))) 50 print(str(e)) 51 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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

1

自己解決

topコマンドでload averageを見てみたところ、クラッシュするときには7~8まで跳ね上がっていたためサーバ側の問題みたいでした。お騒がせ致しました。

投稿2019/05/15 08:51

nezuko

総合スコア12

Kitami👍を押しています

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

1

同様の問題が報告されています。
最新バージョンが必ずしもいいとは限りません。
私も昔、chromedriverの色んなバージョンを試した記憶があります(10通りぐらい)
issue

投稿2019/05/14 06:15

yamato_user

総合スコア2321

nezuko👍を押しています

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.54%

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

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

質問する

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

スクレイピング

スクレイピングとは、公開されている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(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。