【質問】seleniumでIEを独立して操作したい

1,172 views
Skip to first unread message

yoshida....@jp.panasonic.com

unread,
Mar 13, 2018, 8:30:03 PM3/13/18
to 日本Seleniumユーザーコミュニティ
通常、Pythonから実行するとブラウザ画面が立ち上がって、そのブラウザにフォーカスがあたるため、
別の作業をしていた場合に、seleniumで制御しているブラウザに入力されてしまいます。

Chrome等ヘッドレスブラウザだと入力は奪われないと思いますが、IEでも入力を奪われず並行して作業できるような
方法ないでしょうか。

戸田広

unread,
Mar 13, 2018, 9:20:57 PM3/13/18
to 日本Seleniumユーザーコミュニティ
力技っぽいですが、ローカルシステムアカウント(SYSTEMユーザー)の対話的デスクトップの方でIEを動かせば、ログオン中のユーザー側のフォーカスを持っていかれないようにできます。

このやり方では、IEDriverServerのプロセスを何らかの方法でSYSTEMユーザーのものにする必要があります。
例えば、Jenkinsなどの実行基盤や、Selenium GridのノードなどのWindowsサービスを間にかませれば、IEDriverServerやIEはSYSTEMユーザーのプロセスとして起動します。

Takuya Yoshida

unread,
Mar 14, 2018, 8:52:25 AM3/14/18
to 日本Seleniumユーザーコミュニティ
ご返信ありがとうございました.

しかし,今回はPythonを使ってアプリを作りexeファイルにして多数の素人のユーザに配りたい案件で,
ユーザ側1台1台で設定するのは難しい状況です...
アプリ側で制御できる方法はなんとかないでしょうか??
やっぱり一般的なクライアントのRPAツールのように専用PCを準備するか,VMのようなもので独立させて動かすしかないでしょうか...


2018年3月14日水曜日 10時20分57秒 UTC+9 戸田広:

Jun-ichi Sakamoto

unread,
Mar 15, 2018, 3:57:54 AM3/15/18
to 日本Seleniumユーザーコミュニティ
Windows OS であれば、"ウィンドウステーション" のコンテキストでいうところの "デスクトップ" を活用することで、「画面として見えないウィンドウステーション/デスクトップ」を Win32 API などを叩いて作成し、その「見えないデスクトップ」で IEDriver.exe を起動すれば、「画面として見えないデスクトップ内で、IE を Selenium 制御」ができそうな気はします。


仕組みの本質的な部分は、「ローカルシステムアカウント(SYSTEMユーザー)の対話的デスクトップの方でIEを動かす」のと同じです。ただ、Win32 API 呼び出して CreateDesktop API とか使うことで、単一 .exe の実行内で完結しそう、っていうことです。

個人的には、こういうヘンな Hack、好きなんでw、試してみたいところなんですが、ちょっと最近忙しすぎて、多分手が回らないです...。

あと、この方法はフォーカスが奪われないだけじゃなくて、IE が画面上に現れないことになるので、(Yoshida さんの要件的に) それでいいのかな? という不安 (? 疑問?) はあります。

Takuya Yoshida

unread,
Mar 15, 2018, 11:46:02 PM3/15/18
to 日本Seleniumユーザーコミュニティ
ご返信ありがとうございます。

デスクトップを新規で作成できるAPIあるんですね!
pythonからの呼び出し方含め、よくわかっていないので勉強してみます。

ご心配いただいた、画面が見えなくなることにつきましては、処理結果をCSVに吐き出しているので、
それがCreateDesktopで作ったデスクトップで実行した場合でも可能であれば画面が見えていなくても問題ありません。

2018年3月15日木曜日 16時57分54秒 UTC+9 Jun-ichi Sakamoto:

戸田広

unread,
Mar 18, 2018, 12:38:11 AM3/18/18
to 日本Seleniumユーザーコミュニティ
利用実績は聞いたことがないですが、
まさにCreateDesktop APIを使ってヘッドレスIEを実現しようとしているドライバーがあって
2014年から細々と開発が続いています。
試しに少しだけ使ってみたところ、clickとかsendKeysとかは普通に動くようです。
これを併用するのが現時点ではいちばん手軽かもしれませんね。



2018年3月16日金曜日 12時46分02秒 UTC+9 Takuya Yoshida:

Takuya Yoshida

unread,
Mar 20, 2018, 12:27:44 AM3/20/18
to 日本Seleniumユーザーコミュニティ
ご返信ありがとうございます。
教えていただいたドライバを利用しようとしたのですがうまく起動できませんでした。

desktop_utils.exeとheadless_ie_selenium.exeを同階層に置いて下記ソースを実行しました。
通常のIEのドライバはうまく動きました(コメントアウト文)が、ヘッドレスのほうのドライバでは、
その次の行のprint文に到達できませんでした。
何か方法間違ってますでしょうか?ちなみにOSはWin7です。

<ソース>
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

#driver = webdriver.Ie("./IEDriverServer.exe")
driver = webdriver.Ie("./headless_ie_selenium.exe")
print("aaa")
driver.get("https://www.google.com")
googleSearch = driver.find_element_by_name("q")
googleSearch.send_keys("TEST")
googleSearch.send_keys(Keys.ENTER)

time.sleep(4)

print(driver.title)

2018年3月18日日曜日 13時38分11秒 UTC+9 戸田広:
Reply all
Reply to author
Forward
0 new messages