PythonでSeleniumでプログラム的にFirefoxをヘッドレスにする方法は?


124

このコードをpython、selenium、firefoxで実行していますが、Firefoxの「ヘッド」バージョンを取得しています。

binary = FirefoxBinary('C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe', log_file=sys.stdout)
binary.add_command_line_options('-headless')
self.driver = webdriver.Firefox(firefox_binary=binary)

私はバイナリのいくつかのバリエーションも試しました:

binary = FirefoxBinary('C:\\Program Files\\Nightly\\firefox.exe', log_file=sys.stdout)
        binary.add_command_line_options("--headless")

2
これを機能させるには、Firefoxのバージョンが56以上である必要があることを追加したいと思います。投稿された解決策のいずれかが私のもので機能しない理由を理解するためにしばらく時間がかかりました。developer.mozilla.org/en-US/Firefox/Headless_mode
Bora Lee

回答:


222

Firefoxブラウザをヘッドレスで呼び出すには、次のようにクラスをheadless介してプロパティを設定できOptions()ます。

from selenium import webdriver
from selenium.webdriver.firefox.options import Options

options = Options()
options.headless = True
driver = webdriver.Firefox(options=options, executable_path=r'C:\Utility\BrowserDrivers\geckodriver.exe')
driver.get("http://google.com/")
print ("Headless Firefox Initialized")
driver.quit()

ヘッドレスモードを実現する別の方法があります。コードを変更せずにFirefoxでヘッドレスモードを無効または有効にする必要がある場合は、Firefoxでヘッドレスを実行するか、まったく設定しないかMOZ_HEADLESS問わず、環境変数を何にでも設定できます。

これは、たとえば継続的インテグレーションを使用していて、サーバーで機能テストを実行したいが、PCで通常モードでテストを実行したい場合に非常に便利です。

$ MOZ_HEADLESS=1 python manage.py test # testing example in Django with headless Firefox

または

$ export MOZ_HEADLESS=1   # this way you only have to set it once
$ python manage.py test functional/tests/directory
$ unset MOZ_HEADLESS      # if you want to disable headless mode

アウトロ

Seleniumを介してヘッドレスモードでChromeブラウザーを起動するようにChromeDriverを構成する方法


4
アップグレードされたSelenium(3.14.1)とPhantomJSは非推奨となったため、私のテストはどれも機能しませんでした。急いでFirefoxに切り替える必要がありました。この素晴らしい要約をありがとう
MortenB '16 / 10/16

5
MOZ_HEADLESS = 1 python manage.pyテストでうまくいきました!xvfb-runはもう必要ありません(:
Nicky Kouffeld

23

最初の答えはもう機能しません。

これは私のために働きました:

from selenium.webdriver.firefox.options import Options as FirefoxOptions
from selenium import webdriver

options = FirefoxOptions()
options.add_argument("--headless")
driver = webdriver.Firefox(options=options)
driver.get("http://google.com")

Python 3.8.2 / selenium .__ version__ == '3.141.0'はうまく動作します!
hirnwunde

1
from selenium import webdriver呼び出しに追加webdriver.Firefox()

2
受け入れられた回答は、最新バージョンのFirefoxand でも動作しますgeckodriver
CONvid19


2

これを後で見つけた可能性がある(そしてJavaでこれを実現する方法が欲しい)人々のためのメモです。FirefoxOptionsは、ヘッドレスモードを有効にすることもできます。

FirefoxOptions firefoxOptions = new FirefoxOptions();
firefoxOptions.setHeadless(true);

6
この質問は、JavaではなくPythonに関するものです。
Mapio

0
Used below code to set driver type based on need of Headless / Head for both Firefox and chrome:

// Can pass browser type 

if brower.lower() == 'chrome':
    driver = webdriver.Chrome('..\drivers\chromedriver')
elif brower.lower() == 'headless chrome':
    ch_Options = Options()
    ch_Options.add_argument('--headless')
    ch_Options.add_argument("--disable-gpu")
    driver = webdriver.Chrome('..\drivers\chromedriver',options=ch_Options)
elif brower.lower() == 'firefox':
    driver = webdriver.Firefox(executable_path=r'..\drivers\geckodriver.exe')
elif brower.lower() == 'headless firefox':
    ff_option = FFOption()
    ff_option.add_argument('--headless')
    ff_option.add_argument("--disable-gpu")
    driver = webdriver.Firefox(executable_path=r'..\drivers\geckodriver.exe', options=ff_option)
elif brower.lower() == 'ie':
    driver = webdriver.Ie('..\drivers\IEDriverServer')
else:
    raise Exception('Invalid Browser Type')
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.