Bagaimana cara membuat firefox headless secara terprogram di Selenium dengan python?

124

Saya menjalankan kode ini dengan python, selenium, dan firefox tetapi masih mendapatkan versi 'head' dari 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)

Saya juga mencoba beberapa variasi biner:

binary = FirefoxBinary('C:\\Program Files\\Nightly\\firefox.exe', log_file=sys.stdout)
        binary.add_command_line_options("--headless")
Tintinabulator Zea
sumber
2
Saya hanya ingin menambahkan bahwa versi Firefox Anda harus 56+ agar ini berfungsi. Butuh beberapa saat untuk mencari tahu mengapa salah satu solusi yang diposting tidak berfungsi pada solusi saya. developer.mozilla.org/en-US/Firefox/Headless_mode
Bora Lee

Jawaban:

223

Untuk menjalankan Firefox Browser tanpa head, Anda dapat mengatur headlessproperti melalui Options()kelas sebagai berikut:

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()

Ada cara lain untuk mencapai mode tanpa kepala. Jika Anda perlu menonaktifkan atau mengaktifkan mode tanpa kepala di Firefox, tanpa mengubah kodenya, Anda dapat menyetel variabel lingkungan MOZ_HEADLESSke apa pun jika Anda ingin Firefox berjalan tanpa kepala, atau tidak menyetelnya sama sekali.

Ini sangat berguna ketika Anda menggunakan misalnya integrasi berkelanjutan dan Anda ingin menjalankan tes fungsional di server tetapi tetap dapat menjalankan tes dalam mode normal di PC Anda.

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

atau

$ 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

Outro

Bagaimana cara mengkonfigurasi ChromeDriver untuk memulai browser Chrome dalam mode Headless melalui Selenium?

DebanjanB
sumber
4
Selenium yang ditingkatkan (3.14.1) dan PhantomJS sekarang tidak digunakan lagi, jadi tidak ada pengujian saya yang berhasil. Harus beralih ke Firefox - tanpa kepala terburu-buru. Terima kasih atas ringkasan yang luar biasa ini
MortenB
5
MOZ_HEADLESS = 1 tes python manage.py berhasil! Tidak perlu menjalankan xvfb lagi (:
Nicky Kouffeld
23

Jawaban pertama tidak berfungsi lagi.

Ini berhasil untuk saya:

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")
Philippe Delteil
sumber
Python 3.8.2 / selenium .__ version__ == '3.141.0' bekerja dengan baik!
hirnwunde
1
tambahkan from selenium import webdriverke permintaanwebdriver.Firefox()
Snow
2
Jawaban yang diterima masih berfungsi dengan versi terbaru Firefoxdangeckodriver
CONvid19
2

Hanya sebuah catatan untuk orang-orang yang mungkin telah menemukan ini nanti (dan menginginkan cara java untuk mencapai ini); FirefoxOptionsjuga mampu mengaktifkan mode tanpa kepala:

FirefoxOptions firefoxOptions = new FirefoxOptions();
firefoxOptions.setHeadless(true);
TomasH
sumber
6
Pertanyaan ini tentang Python, bukan Java.
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')
rahul rai
sumber