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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Chrome

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

selenium

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

Q&A

解決済

4回答

1609閲覧

Exe化したPython+seleniumをExcelVBAからうまく起動できない

pluszero

総合スコア6

Chrome

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

selenium

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

0グッド

1クリップ

投稿2021/03/15 02:25

編集2021/03/15 03:12

Excel上で更新表示されるRSS情報がある条件に達した時に、
ExcelVBAでshellコマンドでPython(+selenium)を起動して
Webサイトにアクセスしにいくシステムを
使いたいのですが、shellコマンドによる起動がうまくいきません。

Pythonのプログラムはchromedriverを使うもので、
pyinstaller xxxx.py --onefile --noconsole
でEXE化して、chromedriverと同じディレクトリに保存してあります。
そのEXEをマウスでダブルクリックすると、問題なく起動してwebにアクセスします。
なので、chromedriverのバージョン不整合の問題ではないと思っています。

ところが、これをExcelVBAから、
Shell "C:\xxx\xxx.exe"
で実行すると、Exeが一瞬動きかけてるのですが、
chromeが立ち上がる前に、ものの1-2秒で終了してしまうのです。

ExcelVBA上での記述の問題なのか、何か
Pythonにsleep処理を入れないといけないのか、などいろいろ
試したのですが、解決策が見つかりません。

同じような問題に直面した方、心当たりのある方、
どうかよろしくお願いします。

(追記1)
同じ問題が2台の違うPCで発生することを確認ずみです。
片方はExcel2010、もう片方はExcel2013
Windowsは両方とも10

また、ExcelVBAは

Sub test()
Shell "C:\xxx\xxx.exe"
End sub

のような単純なソースからの起動で失敗しています

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

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

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

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

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

guest

回答4

0

原因がいまひとつ特定できていませんがあれこれいじっているうちに動き始めました。
やったことは以下です。

・.pyのEXE化をやめてバッチファイル.batでpython xxxx.pyのコマンドで起動させる形式に変えた
・chromedriverは起動用バッチファイルと同じ場所に置き、.pyのchromedriver読み込み時に明示的にパス指定
・.py中のchromedriver読み込み時のオプション指定がいくつかあったのをなるべく削除(ファイルのDL先ディレクトリ指定など)

どれが効いたのかいまひとつはっきりしないのですが、pyinstallerによるEXE化に違和感を持たれた方もおられたようですので、案外そこに一因があったのかもしれません。もし原因がはっきりしたら追記します

なお、VBAからの起動がどうしてもできない場合に備えて、VBAから保存させるファイルを定期的にチェックして、フラグが立った時はselenium用の.pyを起動させる、という.pyも別途書いたところこれは一発で狙い通りに動かすことができました。なのでもしまたVBAからの.py起動が何かトラブった場合は、そちらで対処する予定です。

投稿2021/03/16 18:39

pluszero

総合スコア6

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

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

0

自己解決

結局あれこれいじっているうちに動き始めました。
・.pyのEXE化をやめてバッチファイル.batでpython xxxx.pyのコマンドで起動させる形式に変えた
・chromedriverは起動用バッチファイルと同じ場所に置き、.pyのchromedriver読み込み時に明示的にパス指定
・.py中のchromedriver読み込み時のオプション指定がいくつかあったのをなるべく削除(ファイルのDL先など)

どれが効いたのかいまひとつはっきりしないのですが、pyinstallerによるEXE化に違和感を持たれた方もおられたようですので、そこに一因があったのかもしれません。もし原因がはっきりしたら追記します

なお、VBAからの起動がどうしてもできない場合に備えて、VBAから保存させるファイルを定期的にチェックして、フラグが立った時はselenium用の.pyを起動させる、という.pyも別途書いたところこれは一発で狙い通りに動かすことができました。なのでもしまたVBAからの起動が何かトラブった場合は、そちらで対処する予定です。

投稿2021/03/16 18:36

pluszero

総合スコア6

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

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

stdio

2021/03/16 23:48

> .pyのchromedriver読み込み時に明示的にパス指定 私の予想ですが、これが一番大きいと思います。カレントディレクトリで検索して頂ければわかるとかは思いますが、これが原因で動かせなくなっていたのだと想定されます。
guest

0

原因がわかりませんが、こんな感じでどうでしょうか。

VBA

1CreateObject("WScript.Shell").Run "C:\xxx\xxx.exe"

VBA

1Shell "C:\xxx\xxx.bat" '別途batをセット

投稿2021/03/15 05:32

jinoji

総合スコア4585

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

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

stdio

2021/03/15 05:36

すみません。頑なにEXEにこだわる理由は何ですか?
jinoji

2021/03/15 06:06

EXEにこだわらない回答例をstdioさんが既に示しているので、 私はEXEを起動させる方法を提示することで解決策の多様化に貢献しようと考えただけです。
stdio

2021/03/15 06:11 編集

ああ、すみません。 質問者と間違えました。しっかりと見ないとですね... あと、すみません。 少し話ずれますが、VBAからbatを呼んでどうするつもりでしょうか?
jinoji

2021/03/15 06:32

別途batという駄洒落を言いたかっただけです。 キットカットできっと勝つ。 ほっともっとでチキンカツ。 人々のヒットビット。 batの中に "C:\xxx\xxx.exe" と書いておく、という意味です。 なぜ起動しないのかの原因は全く見当がつかないので、 他の方法でExcelVBAからEXEを起動するには、と考えました。
stdio

2021/03/15 06:39

なるほど、駄洒落だったんですね。
pluszero

2021/03/15 09:27

.bat内でpython xxx.pyと記述して、chromedriverのパスを通したうえで.batで走るように手を加えてみましたが、やはりマウスのダブルクリックなら動き、shellコマンドや、CreateObject("WScript.Shell").Run で起動すると、すぐに止まってしまいます。ExcelVBAの方に何か制約がありそうな気がします。
guest

0

私の何度かPython+seleniumでWebの操作自動を行ってきた人間ですが、まず一言。
chromedriverと同じ階層においたところで意味がありません
そもそも私には何故ExcelVBAから起動したいのか、まるで意味が分かりません。
Windowsパッチなるものが存在しますので、そちらから直接Pythonのコードを叩いてしまったらいいような気がします。

cd %~dp0% python main.py

投稿2021/03/15 05:17

stdio

総合スコア3307

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

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

stdio

2021/03/15 06:40 編集

原因考えていたら分かったかも知れません(ようはジャストタイムなので根拠はなし) 問題はカウントディレクトリにあると思います。 Pythonからchromedriverを動かす際、相対パスでプログラムしていませんか? もしそうなら、そのExcelVBAのディレクトリから見たパスが元になる為、階層の違うPythonでは別のディレクトリを見ていることになります(つまり、そこにchromedriverはない) つまりPythonのファイルとchromedriverとExcelVBAは同じディレクトリに置く必要があった!!
pluszero

2021/03/15 09:23 編集

exe化していたのは、タスクスケジューラでpythonを走らせるときにその形式でやるのが習慣化しているので手癖のようなものです。 なので、pipでchromedriverを入れてパスを通して.batファイル内にpython xxxx.pyと記述して、同じく.batを叩いてみましたが、症状かわりませんでした。
stdio

2021/03/15 22:09 編集

すみません。方向を変えて質問します。 driver = webdriver.Chrome(PATH, options = options) とPythonのコードでこんな感じになっている部分はありませんか? このPATHのところにどのような文字列が入っているか知りたいです。
pluszero

2021/03/16 18:25

環境変数でパスを通した直後は、いったんパス指定を削除して動かしましたが、同じディレクトリに置いてあるほうが自分的には確認が楽なので、chromedriverを同じディレクトリに置いて、そこをパス指定しました。結局あれこれやっているうちに、なんとなく動き始めたのですが、状況は別途まとめます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問