Làm thế nào để tạo cho firefox không đầu theo lập trình trong Selenium với python?


124

Tôi đang chạy mã này với python, selen và firefox nhưng vẫn nhận được phiên bản 'head' của 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)

Tôi cũng đã thử một số biến thể của nhị phân:

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

2
Tôi chỉ muốn nói thêm rằng phiên bản Firefox của bạn phải là 56+ để tính năng này hoạt động. Tôi đã mất một lúc để tìm ra lý do tại sao bất kỳ giải pháp nào được đăng không hoạt động với tôi. developer.mozilla.org/en-US/Firefox/Headless_mode
Bora Lee

Câu trả lời:


223

Để gọi trực tiếp Trình duyệt Firefox, bạn có thể đặt thuộc headlesstính thông qua Options()lớp như sau:

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

Có một cách khác để thực hiện chế độ không đầu. Nếu bạn cần tắt hoặc bật chế độ không đầu trong Firefox, mà không cần thay đổi mã, bạn có thể đặt biến môi trường MOZ_HEADLESSthành bất kỳ thứ gì nếu bạn muốn Firefox chạy không đầu hoặc không đặt nó.

Điều này rất hữu ích khi bạn đang sử dụng, chẳng hạn như tích hợp liên tục và bạn muốn chạy các bài kiểm tra chức năng trong máy chủ nhưng vẫn có thể chạy các bài kiểm tra ở chế độ bình thường trong PC của mình.

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

hoặc là

$ 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

Làm cách nào để định cấu hình ChromeDriver để khởi chạy trình duyệt Chrome ở chế độ Không đầu thông qua Selenium?


4
Đã nâng cấp Selenium (3.14.1) và PhantomJS hiện không được dùng nữa, vì vậy không có thử nghiệm nào của tôi hoạt động. Phải chuyển sang Firefox - không cần vội vàng. Cám ơn tóm tắt tuyệt vời này
MortenB

5
MOZ_HEADLESS = 1 thử nghiệm python management.py đã thành công! Không cần xvfb-run nữa (:
Nicky Kouffeld,

23

Câu trả lời đầu tiên không hoạt động nữa.

Điều này đã làm việc cho tôi:

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' hoạt động tuyệt vời!
hirnwunde

1
thêm from selenium import webdriverđể gọiwebdriver.Firefox()
Tuyết

2
Câu trả lời được chấp nhận vẫn hoạt động với phiên bản mới nhất của Firefoxgeckodriver
CONvid19


2

Chỉ là một lưu ý cho những người có thể đã tìm thấy điều này sau này (và muốn cách java đạt được điều này); FirefoxOptionscũng có khả năng bật chế độ không đầu:

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

6
Câu hỏi này là về Python, không phải 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')
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.