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!

nonshatter
sumber

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
grahaminn.dll
sumber
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)
Stéphane Bruckert
sumber
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 .

AJ
sumber
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.

haroonzone
sumber
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.

郑文勋
sumber
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

Nicholas DiPiazza
sumber
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.

guillemhs
sumber
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.

Vinee-the-Pooh
sumber
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.

U2647
sumber
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')
Max Malysh
sumber