GUIなしでセレン(Firefox)Webドライバーを実行することは可能ですか?


113

本番サーバーをUbuntu- デスクトップ 10.04からUbuntu- サーバー 12.04にアップグレードすることを検討しています

Selenium Web Driverなど、現在のデスクトップOSで実行されているさまざまなサービスがあります。私の質問は、Selenium Web DriverをCLIベースのシステムから実行できるかどうかです。

私の当面の考えは、Firefoxに依存しているのでできないと思っていますが、誰かが私に間違いを証明してもらいたいのです!


回答:


102

あなたが探しているのは

はい、FirefoxでSeleniumをヘッドレスで実行することは可能です。これはあなたがフォローできる投稿です。

Xvfbを設定するための概要手順は次のとおりです

#install Xvfb
sudo apt-get install xvfb

#set display number to :99
Xvfb :99 -ac &
export DISPLAY=:99    

#you are now having an X display by Xvfb

5
これは機能し、スクリーンショットをサポートします。私はこれを使います。また、Google Chromeでも動作します。
アイザック

これはもう機能しないと思います(Chromeのように新しいgeckodriverが必要なため、少なくとも簡単にはできません)
Archimedes Trajano

1
@ArchimedesTrajanoこれはまだ機能します。Xvfb手順は、Selenium(geckodriverパス上に存在する必要がある)のインストールと構成ではなく、を使用して仮想ディスプレイを作成するためのものです。
expz 2016年

2
私はこれをPython内から実行するのが好きです。これはsubprocess.Popen('Xvfb...')またはで実行できますがos.system('Xvfb...')、Webドライバーをインポートする前に必ず実行してください。
wordsforthewise

4
そのリンクは現在壊れています
oldboy

22

Chromeにヘッドレスモードが追加されました:

op = webdriver.ChromeOptions()
op.add_argument('headless')
driver = webdriver.Chrome(options=op)

4
PhantomJSは現在活発に開発されていません。Gitリポジトリがアーカイブされます。
Wojciech Jakubas 2018年

1
セレンはまた、次のメッセージをPhantomJSを支える停止:「UserWarning PhantomJSのためのセレンのサポートが償却された、代わりにクロムまたはFirefoxのヘッドレスバージョンを使用してください」
イェルク

11

はい。HTMLUnitDriver代わりにFirefoxDriver、webdriverの起動中に使用できます。これはヘッドレスブラウザーのセットアップです。詳細はこちら


1
これは、save_screenshot()などの関数をサポートしますか?coreygoldberg.blogspot.co.uk/2011/06/…– 2012
シャッターを切る

試していませんが、効果的にUIを作成しているが、「仮想」ウィンドウに表示しているため、可能である可能性があります。
grahaminn

2
コンテンツがまったくレンダリングされないため、HTMLUnitDriverはスクリーンショットのキャプチャをサポートしません(問題1361)。私が考えることができる代替案は、getHTMLSourceを使用して、スクリーンショットではなくHTMLページを表示することです。
AJ

10

ヘッドレスブラウザーのサポートが必要な場合は、採用できる別のアプローチがあります。

https://github.com/detro/ghostdriver

これはSelenium Conferenceで発表され、まだ開発中です。ブラウザとしてPhantomJSを使用し、HTMLUnitDriverよりもはるかに優れています。スクリーンショットはまだありませんが、まだ活発に開発されています。


4

オプションは次のように使用することですpyvirtualdisplay

from pyvirtualdisplay import Display

display = Display(visible=0, size=[800, 600])
display.start()

#do selenium job here

display.close()

短いバージョンは次のとおりです。

with Display() as display:
    # selenium job here

これは一般にのPythonカプセル化でありxvfb、なんとなく便利です。

けれどもところで、PhantomJSあなたはそれを使用する場合は、ヘッドレスブラウザと窓なしが開放されると、と思われるPhantomJS、まだ必要な作業にGUI環境を。

ヘッドレスモード(パテ接続コンソール)のPhantomJS()代わりに使用するとFirefox()、エラーコード-6 が表示されます。ただし、デスクトップ環境ではすべて問題ありません。


3

更新:ヘッドレスFirefoxを実行するためにXVFBは必要ありません。Linux上のFirefox v55 +およびWindows / Mac上のFirefox v56 +がヘッドレス実行をサポートするようになりました。

ここにいくつかの使用方法のドキュメントを追加しました:

https://developer.mozilla.org/en-US/Firefox/Headless_mode#Selenium_in_Java


1
コメントは拡張ディスカッション用ではありません。この会話はチャットに移動さました
Bhargav Rao

これは私にはうまくいきませんでした。よくわかりませんが、XVFBはまだ必要だと思います。
Max Malysh

私はここ数年、FirefoxとChromeでヘッドレスブラウザーを使用しています。SeleniumのWebDriverインターフェイスは、setHeadlessパラメータもサポートするようになりました。
ニコラスディピアザ


1

HtmlUnitDriver Webクライアントはシングルスレッドであり、GhostdriverはWebDriverになるための機能の40%にすぎないことに注意してください。

それにもかかわらず、Ghostdriverはテストに対して適切に実行され、WebDriverハブに接続するのに問題があります。


これは他の回答が提供しない新しい情報を提供しますか?
オースティンヘンリー

0

はい、ブラウザなしでテストスクリプトを実行できますが、ヘッドレスモードで実行する必要があります。


0

多分あなたはあなたのウィンドウサイズの寸法を設定する必要があります。と同じように:

options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
options.add_argument('--window-size=1920x1080');

browser = webdriver.Chrome(options=options,executable_path = './chromedriver')

それでも機能しない場合は、ウィンドウサイズのサイズを大きくしてみてください。


0

コンテナ化されたFirefoxをインストールして実行します。

docker pull selenium/standalone-firefox
docker run --rm -d -p 4444:4444 --shm-size=2g selenium/standalone-firefox

を使用して接続webdriver.Remote

driver = webdriver.Remote('http://localhost:4444/wd/hub', DesiredCapabilities.FIREFOX)
driver.set_window_size(1280, 1024)
driver.get('https://www.google.com')
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.