Apakah mungkin menjalankan driver web selenium (Firefox) tanpa GUI?


113

Kami sedang mempertimbangkan untuk meningkatkan server produksi kami dari Ubuntu- desktop 10.04 ke Ubuntu- server 12.04.

Kami memiliki berbagai layanan yang berjalan di OS desktop kami saat ini seperti Selenium Web Driver. Pertanyaan saya adalah dapatkah Selenium Web Driver dijalankan dari sistem berbasis cli?

Saya langsung berpikir bahwa itu tidak bisa, karena bergantung pada Firefox, tetapi saya ingin seseorang membuktikan bahwa saya salah!


Jawaban:


102

Yang Anda cari adalah .

Ya, Selenium di Firefox dapat dijalankan tanpa hambatan. Berikut postingan yang bisa Anda ikuti.

Berikut adalah ringkasan langkah-langkah untuk menyiapkan 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
Ini berfungsi dan mendukung tangkapan layar. Saya menggunakan ini. Ini juga berfungsi dengan google chrome.
Isaac

Saya tidak berpikir ini berfungsi lagi (setidaknya tidak mudah, karena membutuhkan geckodriver baru seperti yang dilakukan chrome)
Archimedes Trajano

1
@ArchimedesTrajano Ini masih bekerja. Petunjuknya adalah untuk membuat tampilan virtual menggunakan Xvfb, bukan untuk menginstal dan mengkonfigurasi Selenium (yang membutuhkan geckodriverjalur).
expz

2
Saya suka melakukan ini dari dalam Python, yang dapat Anda lakukan dengan subprocess.Popen('Xvfb...')atau os.system('Xvfb...'), tetapi pastikan untuk melakukannya sebelum mengimpor webdriver.
kata

4
tautan itu sekarang rusak
oldboy

22

Chrome sekarang memiliki mode tanpa kepala:

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

4
PhantomJS saat ini tidak dalam pengembangan aktif. Repositori Git diarsipkan.
Wojciech Jakubas

1
Selenium juga berhenti mendukung PhantomJS dengan pesan berikut "UserWarning: Dukungan selenium untuk PhantomJS telah disusutkan, gunakan versi tanpa kepala dari Chrome atau Firefox"
Jörg

11

Iya. Anda dapat menggunakan HTMLUnitDriversebagai gantinya untuk FirefoxDriversaat memulai webdriver. Ini adalah pengaturan browser tanpa kepala. Detailnya dapat ditemukan di sini .


1
Apakah ini mendukung fungsi seperti save_screenshot ()? coreygoldberg.blogspot.co.uk/2011/06/…
nonshatter

Belum mencoba, tetapi mungkin karena Anda masih membuat UI secara efektif, tetapi menampilkannya di jendela 'virtual'.
grahaminn

2
HTMLUnitDriver TIDAK akan mendukung tangkapan layar tangkapan karena konten tidak dirender sama sekali (Masalah 1361). Alternatif yang dapat saya pikirkan adalah menggunakan getHTMLSource dan menampilkan halaman HTML daripada screenshot.
AJ

10

Jika Anda menginginkan dukungan browser tanpa kepala, maka ada pendekatan lain yang dapat Anda gunakan.

https://github.com/detro/ghostdriver

Itu diumumkan selama Konferensi Selenium dan masih dalam pengembangan. Ini menggunakan PhantomJS sebagai browser dan jauh lebih baik daripada HTMLUnitDriver, belum ada screenshot, tetapi karena masih dalam pengembangan aktif.


4

Opsional adalah menggunakan pyvirtualdisplayseperti ini:

from pyvirtualdisplay import Display

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

#do selenium job here

display.close()

Versi yang lebih pendek adalah:

with Display() as display:
    # selenium job here

Ini biasanya merupakan encapsulate python xvfb , dan lebih nyaman entah bagaimana.

Ngomong-ngomong, meskipun PhantomJSmerupakan browser tanpa kepala dan tidak ada jendela yang terbuka jika Anda menggunakannya, tampaknya itu PhantomJSmasih perlu lingkungan gui untuk berfungsi.

Saya mendapat Kode Kesalahan -6 ketika saya menggunakan PhantomJS()alih-alih Firefox()dalam mode tanpa kepala (konsol yang terhubung dengan dempul). Namun semuanya baik-baik saja di lingkungan desktop.


3

PEMBARUAN: Anda tidak perlu XVFB untuk menjalankan Firefox tanpa kepala lagi. Firefox v55 + di Linux dan Firefox v56 + di Windows / Mac sekarang mendukung eksekusi tanpa kepala.

Saya menambahkan beberapa dokumentasi cara menggunakan di sini:

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


1
Komentar tidak untuk diskusi panjang; percakapan ini telah dipindahkan ke obrolan .
Bhargav Rao

Ini tidak berhasil untuk saya. Saya tidak yakin, tapi menurut saya XVFB masih diperlukan.
Max Malysh

Saya telah menggunakan browser tanpa kepala di Firefox dan Chrome selama beberapa tahun sekarang. Antarmuka WebDriver untuk Selenium bahkan mendukung parameter setHeadless sekarang.
Nicholas DiPiazza


1

Ketahuilah bahwa webclient HtmlUnitDriver adalah single-threaded dan Ghostdriver hanya memiliki 40% dari fungsionalitas untuk menjadi WebDriver.

Meskipun demikian, Ghostdriver berjalan dengan baik untuk pengujian dan saya mengalami masalah untuk menghubungkannya ke hub WebDriver.


Apakah ini memberikan informasi baru yang tidak diberikan jawaban lain?
Austin Henley

0

Ya, Anda dapat menjalankan skrip pengujian tanpa browser, tetapi Anda harus menjalankannya dalam mode tanpa kepala.


0

mungkin Anda perlu menyetel dimensi ukuran jendela Anda. seperti:

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

jika juga tidak berfungsi, coba tingkatkan dimensi ukuran jendela.


0

Instal & jalankan Firefox dalam container:

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

Hubungkan menggunakan webdriver.Remote:

driver = webdriver.Remote('http://localhost:4444/wd/hub', DesiredCapabilities.FIREFOX)
driver.set_window_size(1280, 1024)
driver.get('https://www.google.com')
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.