วิธีทำให้ firefox headless โดยใช้โปรแกรมใน Selenium ด้วย python


125

ฉันใช้รหัสนี้กับ python, ซีลีเนียมและ firefox แต่ยังคงได้รับ Firefox เวอร์ชัน 'head':

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

คำตอบ:


225

ในการเรียกใช้เบราว์เซอร์ 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()

มีอีกวิธีหนึ่งในการบรรลุโหมดโง่ หากคุณต้องการปิดใช้งานหรือเปิดใช้งานโหมด headless ใน Firefox โดยไม่ต้องเปลี่ยนโค้ดคุณสามารถตั้งค่าตัวแปรสภาพแวดล้อมMOZ_HEADLESSเป็นอะไรก็ได้ถ้าคุณต้องการให้ Firefox ทำงานแบบไร้หัวหรือไม่ต้องตั้งค่าเลย

สิ่งนี้มีประโยชน์มากเมื่อคุณใช้ตัวอย่างการผสานรวมอย่างต่อเนื่องและคุณต้องการเรียกใช้การทดสอบการทำงานในเซิร์ฟเวอร์ แต่ยังคงสามารถเรียกใช้การทดสอบในโหมดปกติในพีซีของคุณได้

$ 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

ส่งท้าย

วิธีกำหนดค่า ChromeDriver เพื่อเริ่มต้นเบราว์เซอร์ Chrome ในโหมด Headless ผ่าน Selenium


4
Selenium ที่อัปเกรดแล้ว (3.14.1) และ PhantomJS เลิกใช้แล้วดังนั้นการทดสอบของฉันจึงไม่ได้ผล ต้องเปลี่ยนไปใช้ Firefox โดยไม่รีบร้อน ขอบคุณสำหรับบทสรุปที่ยอดเยี่ยมนี้
MortenB

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
คำตอบที่ยอมรับยังคงใช้ได้กับเวอร์ชันล่าสุดของFirefoxและgeckodriver
CONvid19


1

เพียงบันทึกไว้สำหรับผู้ที่อาจพบสิ่งนี้ในภายหลัง (และต้องการวิธีการดำเนินการแบบจาวา) FirefoxOptionsยังสามารถเปิดใช้งานโหมด headless:

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

9
คำถามนี้เกี่ยวกับ Python ไม่ใช่ 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')
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.