色々いじっていたら、全く同じコードで動かしているのにもかかわらず挙動が変わってしまうことって珍しくありません。
今回はPythonのseleniumでGoogleChromeを操作しようとしていたのですが、今までと全く同じソースコードで起動させようとすると、chromedriverのログコンソールが立ち上がる状況になってしまいました。
とりあえず解決したので、同じく困っている方のための解決策。
状況:Chrome起動時にコンソールが立ち上がる
こんな感じで、Chromeの起動前にコマンドプロンプトのようなログが出力されるコンソールが立ち上がります。
画像にも映っている通りもちろんheadressのオプションの状態でも、ゴリゴリコンソールが立ち上がるので、うっとおしいです。
解決:seleniumのファイルを直接編集する
きっかけは、環境変数が変わったこと、またはPythonのパッケージ一式を再インストールしたことのどちらかだろうという状況。
いずれにせよ、心当たりがありすぎて、明確な原因はさっぱりわかりません。
selenium自体にオプションのようなコマンドがあるのかと思ったんですが、調べても出てこない。
という事で、起動ファイルを直接編集することにしました。
編集するseleniumのファイル
C:-モジュールディレクトリ-site-packagesseleniumwebdrivercommonservice.py
モジュールをインストールしているディレクトリ内のseleniumフォルダ内にあります。
from win32process import CREATE_NO_WINDOW
当該ファイルの上の方にとりあえず上記コードを追加。追加モジュールのインポートですね。多分あると思いますが、万一ない人はpipで入れてください。
def start(self): """ Starts the Service. :Exceptions: - WebDriverException : Raised either when it can't start the service or when it can't connect to the service """ try: cmd = [self.path] cmd.extend(self.command_line_args()) self.process = subprocess.Popen(cmd, env=self.env, close_fds=platform.system() != 'Windows', stdout=self.log_file, stderr=self.log_file, stdin=PIPE, creationflags=CREATE_NO_WINDOW) # 追記編集 except TypeError: raise ... ...
startメソッド内。自分の環境では62行目付近から記載されていました。
編集個所は、上記のstartメソッド内 subprocess.Popen メソッド。
ここがChromeを起動させる箇所ですが、そこに先ほどインポートするようにしたモジュールの専用の引数を渡します。
creationflags=CREATE_NO_WINDOW
この引数を渡します。
改行するので、一行上の引数の末尾のカンマを忘れないでください。
まとめ
とりあえず、これで直ります。
コメント
コメント一覧 (2件)
モジュールディレクトリのディレクトリがsite-packagesseleniumwebdrivercommonservice.pyとあり、ディレクトリが切られていないため、認識に時間がかかりました。区切ってもらえると今後の方が助かるかと思います。
たびたみ恐縮です。私初心者なので上記のform win32process ~の部分に必要なモジュールがpywin32であることがわかるのに試行錯誤で1時間ばかり時間を要してしまいました。諦めかけたところで試しにインストールするとできましたのでわかりましたが、知識がなくても実装できるよう。pywin32をインストールする旨を記載いただくと後の方が助かるかと思います。
いずれにしても、この記事で大変助かりました。どうもありがとうございました。