PythonのSeleniumによるスクレイピングで、Chromeが起動後すぐに終了してしまう
解決したいこと
Seleniumを使用してスクレイピングを使用と思っています。
下記のコードを実行すると、サンプルとしてyoutubeがChromeで起動されると思っていたのですが、
一瞬ウィンドウが開いてすぐに落ちてしまいます。
発生している問題・エラー(ログの内容)
INFO 2021-05-03 18:47:41,355 [logger#log 22] ====== WebDriver manager ======
INFO 2021-05-03 18:47:41,386 [logger#log 12] Current google-chrome version is 90.0.4430
INFO 2021-05-03 18:47:41,386 [logger#log 12] Get LATEST driver version for 90.0.4430
INFO 2021-05-03 18:47:41,517 [logger#log 12] Driver [C:\Users\ユーザー名\.wdm\drivers\chromedriver\win32\90.0.4430.24\chromedriver.exe] found in cache
ERROR 2021-05-03 18:47:44,780 [kickstarter#main 82] error
該当するソースコード
import os
from selenium.webdriver import Chrome, ChromeOptions
import time
import pandas as pd
from selenium.common.exceptions import NoSuchElementException
import csv
import numpy as np
import logging
import logging.handlers
import logging.config
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
####################ログに関する設定####################
# ロガーを取得する
logger = logging.getLogger(__name__)
#ルートロガーの作成。ログレベル=デバッグ
#logger = logging.getLogger('')
logger.setLevel(logging.DEBUG)
# ログ出力フォーマット作成
formatter = '%(levelname)s %(asctime)s [%(module)s#%(funcName)s %(lineno)d] %(message)s'
logging.basicConfig(format=formatter, filename='log.txt')
#エンコーディングをutf-8にする為に、ファイル用ハンドラの作成。ファイル名は logging.log, ログレベル=INFO, ファイルサイズ 1MB, バックアップファイル3個まで、エンコーディングは utf-8
_fileHandler = logging.FileHandler(filename='logging.log', encoding='utf-8')
_fileHandler.setLevel(logging.DEBUG)
# ログの出力形式の設定
formatter = logging.Formatter('%(asctime)s:%(lineno)d:%(levelname)s:%(message)s')
_fileHandler.setFormatter(formatter)
#ファイル用ハンドラをルートロガーに追加
logger.addHandler(_fileHandler)
logging.info("info")
logging.error("error")
logging.debug("debug")
#######################################################
# Chromeを起動する関数
def set_driver(driver_path, headless_flg):
# Chromeドライバーの読み込み
options = ChromeOptions()
# ヘッドレスモード(画面非表示モード)をの設定
if headless_flg == True:
options.add_argument('--headless')
# 起動オプションの設定
options.add_argument('--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36')
# options.add_argument('log-level=3')
options.add_argument('--ignore-certificate-errors')
options.add_argument('--ignore-ssl-errors')
options.add_argument('--incognito') # シークレットモードの設定を付与
# ChromeのWebDriverオブジェクトを作成する。
ChromeDriverManager().install()
return Chrome(executable_path=os.getcwd() + "/" + driver_path, options=options)
# main処理
def main():
try:
# driverを起動
if os.name == 'nt': #Windows
driver = set_driver("chromedriver.exe", False)
elif os.name == 'posix': #Mac
driver = set_driver("chromedriver", False)
# Webサイトを開く
driver.get("https://www.youtube.com/")
time.sleep(5)
except:
logging.info("info")
logging.error("error")
logging.debug("debug")
pass
finally:
os.kill(driver.service.process.pid,signal.SIGTERM)
# 直接起動された場合はmain()を起動(モジュールとして呼び出された場合は起動しないようにするため)
if __name__ == "__main__":
main()
自分で試したこと
本当は対象のURLを開く⇒スクレイピング開始
という内容ですが、もとのコードでも起動して直ぐに落ちてしまうので、
処理部分を削ったコードとなっています(URL開くだけのコード)。
chromeのドライバーを自動更新するようにしており、そこがうまく起動していないのかなと思いましたが、
ログを見る限りversionには問題ないように見えます。
URLはサンプルとしてyoutubeにしていますが、URLをどのサイトに変えても、
ブラウザが立ち上がってすぐに閉じてしまいます。
1月ほど前には動いていたものが、上記記載の通り動かない(すぐに落ちてしまう)状態なので、
versionを疑いましたが問題内容でお手上げの状態です。。。
Selenium 落ちる
等でググっているのですが有力な情報に出会えずという状況です。
お忙しい中申し訳ありませんが、お力添えいただけたら幸いでございます。
宜しくお願い致します。