前提・実現したいこと
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
- 毎回pkill chromeでタスクマネージャーからchromedriverのプロセスを閉じる
→変化なし
補足情報(FW/ツールのバージョンなど)
Google Chrome 74.0.3729.131
ChromeDriver 74.0.3729.6
Python 2.7.12
完全お手上げ状態です。
どうぞよろしくお願い致します。
![guest](/img/icon/icnUserSample.jpg)
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。