Electron: Versi tanpa kepala untuk pengujian

Dibuat pada 9 Apr 2014  ·  82Komentar  ·  Sumber: electron/electron

@zcbenz menurut Anda berapa banyak pekerjaan yang akan dilakukan untuk membuat versi tanpa kepala dari atom-shell yang dapat digunakan sebagai pengganti phantomjs ?

phantomjs semakin tertinggal dari apa yang dilakukan browser web aktual hari ini dan akan sangat bagus untuk memiliki sesuatu yang lebih mutakhir untuk digunakan untuk pengujian tanpa kepala.

enhancement

Komentar yang paling membantu

Mengenai NightmareJS: Saat ini kami sedang mengerjakan versi Nightmare yang dibangun di atas Chrome tanpa kepala bahkan mampu berjalan di lingkungan tanpa server seperti AWS Lambda. Kami akan segera membukanya @graphcool. 🚀

Semua 82 komentar

Dengan menggunakan jendela browser tersembunyi atom-shell benar-benar dapat melakukan apa yang phantomjs lakukan, contoh di beranda phantomjs dapat diterjemahkan ke atom-shell:

BrowserWindow = require('browser-window');

console.log('Loading a web page');
var page = new BrowserWindow({show: false});
var url = 'http://www.phantomjs.org/';
page.on('loading-state-changed', (event, isLoading) {
  if (!isLoading)
    //Page is loaded!
    require('app').exit();
});
page.loadUrl(url);

Tentu saja kita mungkin perlu menambahkan beberapa API lagi untuk tujuan pengujian otomatisasi.

Satu-satunya masalah adalah alih-alih menggambar ke buffer virtual, atom-shell sebenarnya menarik halaman ke jendela nyata, ini akan membutuhkan lingkungan grafis, di Window dan OS X tidak masalah, namun di Linux kita harus menggunakan xvfb untuk menyediakan server X untuk atom-shell. Ini dirancang dalam API konten Chromium, jadi kami tidak dapat melakukan apa pun untuk menghilangkan ketergantungan lingkungan grafis.

Saya telah berhasil dengan ini akhir-akhir ini (menggunakan Xvfb di server Ubuntu). Kasus penggunaan saya adalah menangkap tangkapan layar halaman templat. Faktanya, saya telah menemukan bahwa atom-shell melalui Xvfb di server (besar m3) memiliki kinerja yang lebih baik daripada di Macbook pro lokal saya. Ini membuat saya ingin membuat atom-Shell bekerja melalui Xvfb di osx juga.

Karena osx dikirimkan dengan Xvfb, bagian itu mudah. Bisakah saya mendapatkan atom-Shell untuk menggunakan tampilan Xvfb di osx? Menggunakan variabel standar DISPLAY env seperti yang saya lakukan di linux tidak berfungsi. Mungkin libchromiumcontent tidak tahu cara menggunakan X11 saat berjalan di Darwin?

Xvfb hanya berfungsi untuk aplikasi yang ditulis untuk lingkungan X11, pada OS X atom-shell menggunakan Kakao untuk tampilan, yang saya yakin tidak dapat bekerja dengan Xvfb.

Ya agak satukan itu. Mungkin bukan cara untuk mengkompilasi dari sumber untuk X11?

@zcbenz saat ini tidak mungkin untuk membuat BrowserWindow yang lebih besar dari resolusi saat ini di OS X, bahkan jika Anda menggunakan new BrowserWindow({show: false});

@FWeinb dapatkah Anda membuka tiket khusus yang terpisah untuk hal di atas?

Dibuat #475

Saya menutup ini karena tidak ada cara untuk menggambar halaman tanpa benar-benar membuat widget asli di Chromium, dan saya pikir mereka tidak akan pernah mengizinkannya.

Untuk pengujian otomatis, kami mendukung Selenium.

Proyek CEF memiliki dukungan untuk rendering di luar layar , sehingga Anda dapat menggambar layar ke dalam buffer alih-alih jendela. Mengenai server X untuk Linux, tampaknya ada cara untuk bekerja tanpanya dengan menambahkan target yang disebut Ozon (lihat diskusi di sini ).

@etiktin Terima kasih atas informasinya! Saya membuka kembali ini karena sudah ada implementasi tentang cara melakukannya.

Kami benar-benar dapat menggunakan dukungan untuk ini. Kami baru-baru ini mengganti Phantom dengan Electron di Nightmare dan menyukainya sejauh ini, tetapi itu tidak berfungsi di luar kotak di Linux.

Inilah yang perlu kita lakukan sekarang untuk membuatnya berfungsi: https://github.com/segmentio/nightmare/issues/224#issuecomment -141575361

Saya telah diberi tugas untuk mengotomatiskan perilaku pengguna untuk salah satu aplikasi web kami yang akan diubah menjadi aplikasi Electron desktop yang berdiri sendiri. Sebelum perusahaan kami memutuskan untuk melakukan langkah ini, kami membuat objek halaman menggunakan driver web chrome dan berinteraksi dengan aplikasi web dengan menjalankan tombol/dropdown/kotak teks menggunakan pemilih css. Apakah ada cara untuk melakukan ini dengan aplikasi web yang dibungkus dengan cangkang Elektron? Perusahaan berencana menggunakan opsi bilah menu untuk menjalankan fungsionalitas tertentu dan saya mencoba masuk ke opsi bilah menu default seperti File/Edit/Bantuan menggunakan driver JavaScript tanpa hasil. Apakah ada contoh di luar sana tentang cara melakukan ini?

https://github.com/segmentio/nightmare/issues/224#issuecomment -141575361 sepertinya cuplikan @matthewmueller berfungsi di Linux :+1:

Adakah yang mendapatkan pengujian tanpa kepala yang bekerja di SuSE? Khususnya SLES?

@fritx Hal yang sama digunakan untuk SlimerJS, tapi itu BUKAN mode tanpa kepala.

@fritx itulah yang dikatakan @zcbenz , Anda harus menjalankan Xvfb. Baik CEF3 dan Chromium Content Shell saat ini bergantung pada Xlib. Tetapi dengan penyelesaian Ozon: https://www.chromium.org/developers/design-documents/ozone
Anda akan dapat memberikan I/O tingkat rendah.

Rupanya, ada bug utama di Chromium itu sendiri: https://code.google.com/p/chromium/issues/detail?id=546953

Ini menarik:

Tanggal: Rab 02 Des 15:35:21 2015

[tanpa kepala] Kerangka awal tanpa kepala/publik/

Buat garis besar API Tanpa Kepala di masa mendatang.

Apakah ChromeDriver bekerja dengan elektron?

Biner tanpa kepala yang tidak memerlukan xvfb akan membuka lingkungan baru seperti AWS Lambda - daftarkan saya!

@Vanuan Pernahkah Anda mendengar tentang Nightmare ? Itu mungkin membantu Anda jika tidak ada yang secara khusus Anda butuhkan dari ChromeDriver.

Apakah ada driver Capybara/Selenium?

+1

Saya sedikit bingung. Apakah ada mode tanpa kepala? Bisakah kita melakukan ini secara efektif dengan BrowserWindow({show: false})? Ini akan sangat berguna bagi saya, saya mencoba membuatnya berfungsi sehingga kami dapat membuat komponen web sisi server: https://github.com/scramjs/scram-markup-engine

Saya pikir saya telah menjawab pertanyaan saya sendiri saat saya melihat sekeliling. Elektron tidak mendukung mode tanpa kepala yang canggih. Nightmare tampaknya mengizinkan sesuatu seperti itu, tetapi Anda masih harus melakukan beberapa konfigurasi untuk membuatnya bekerja pada sistem tertentu tanpa lingkungan grafis. Electron juga dapat melakukannya jika Anda menggunakan BrowserWindow({show: false}), tetapi Anda harus menggunakan xvfb untuk menyediakan lingkungan grafis pada sistem Linux tanpa kepala (yang tampaknya tidak terlalu buruk sebenarnya). Koreksi saya jika saya salah, dan beri +1 pada fitur ini.

Dengan proyek tanpa kepala krom yang baru [1] apakah mungkin membuat elektron tanpa kepala tanpa menggunakan xvfb?

Saya percaya batasan saat ini adalah dengan libchromium? Sudahkah orang-orang chrome memperbaikinya?

1: https://chromium.googlesource.com/chromium/src/+/master/headless/README.md

Ada kemajuan dalam hal ini? Ini akan sangat berguna untuk pengujian

segmentio/nightmare sangat cocok untuk ini. Secara sederhana:

const nightmare = Nightmare({
  show: true
});

@amilajack Untuk kasus sederhana seperti menjalankan tes unit Mocha sederhana tanpa kepala, Nightmare akan seperti menggunakan palu godam seberat 20 pon untuk mengemudi dengan paku kecil (baca: pembunuhan besar-besaran). Ini adalah perpustakaan otomatisasi browser yang lengkap, termasuk baterai yang tidak hanya dapat melakukan navigasi dan input dasar, tetapi bahkan menyimpan file HTML dan PDF ke disk atau mengambil tangkapan layar. Tepat 0% dari pustaka ini diperlukan untuk menjalankan pengujian unit sederhana.

@isiahmeadows @mcoyer mengatakan bahwa dia menginginkan versi tanpa kepala dari atom-shell yang dapat digunakan sebagai pengganti'. Elektron cukup banyak persis seperti itu dengan fitur tambahan.

Ya, tapi mengapa Anda membutuhkan gula untuk apa yang tidak Anda gunakan? (Saya mengacu pada semua gula - Anda secara teoritis dapat mengimplementasikan kembali Electron secara keseluruhan hanya dengan binding vanilla Node + OpenGL).

Kasus penggunaan yang paling umum untuk browser tanpa kepala adalah hal-hal seperti apa yang sudah ada untuk mocha-phantomjs dan Karma - menjalankan pengujian unit browser dari CLI. Kebanyakan orang menggunakan xvfb, server X tanpa kepala, di Travis jika mereka perlu menguji Firefox/Chrome, karena itu tidak memiliki server X yang berjalan, dan Anda bahkan dapat menjalankan Electron dengan itu, tetapi browser tanpa kepala seperti PhantomJS dan SlimerJS tidak ' tidak membutuhkan server X. Electron + Nightmare masih membutuhkan server X dari beberapa jenis (bahkan jika itu xvfb) untuk dijalankan, dan masalah ini meminta ketergantungan itu untuk dihapus, tetapi kemungkinan besar tidak akan terjadi sampai Chromium itu sendiri dapat tanpa kepala dan perubahan itu disebarkan untuk konten libchromium .

Headless sekarang ada di Chrome 59: https://www.chromestatus.com/features/5678767817097216

@sindresorhus @zcbenz Apakah perubahan Chromium ini akan membuat perbedaan di sini?

Elektron sudah luar biasa, dan mode tanpa kepala akan membuatnya lebih baik!

(Ini juga akan berguna untuk Nightmare , yang didasarkan pada Electron)

Saya dapat membuat Xvfb bekerja pada lambda yang mungkin berguna untuk pengujian berbasis lambda... https://github.com/nisaacson/aws-lambda-xvfb

Ada kabar kapan Electron akan mendukung true headless? Bisakah kita mengandalkan ini terjadi? Saya tidak sabar untuk menjatuhkan xvfb.

@lastmjs apakah Anda berhasil menjalankan Electron di AWS Lambda berdasarkan xvfb?

Terima kasih atas komentar Anda @MrSaints. Saya memang men-debug repo ini selama beberapa jam sekarang karena saya tidak dapat menjalankan nightmare untuk dijalankan. Apakah itu bekerja untuk Anda?

@zcbenz FYI chrome 59 akan mendapatkan dukungan mode tanpa kepala https://www.chromestatus.com/features/5678767817097216

@schickling lihat https://github.com/JohannesHoppe/nightmare-html2pdf -- mimpi buruk di buruh pelabuhan, dengan Xvfb

Terima kasih @JohannesHoppe , saya membuat Nightmare bekerja di Docker dengan Xvfb tetapi ingin menjalankannya di AWS Lambda sebagai gantinya.

Saya telah membuka masalah untuk mengganti Electron dengan Chrome tanpa kepala di Nightmare: https://github.com/segmentio/nightmare/issues/1092

Maaf jika ini dijawab di tempat lain, tetapi saya tidak dapat menemukan jawaban yang konkret. Dalam komentarnya yang sangat +1 di atas, @sandstrom menunjukkan bahwa headless sekarang tersedia di Chrome 59.

Apakah dukungan untuk bendera tanpa kepala Chrome pada peta jalan pengembangan untuk Electron? Tampaknya ini adalah "kemenangan" yang berpotensi besar untuk Electron karena memungkinkan penggunaan tanpa kepala yang sebenarnya.

Saya setuju dengan @rinogo. Memiliki opsi tanpa kepala untuk elektron akan sangat berguna untuk menjalankan tes di sistem ci dan di kotak dev tanpa perlu tampilan virtual dan mengambil alih mesin. Saya juga tertarik untuk mengetahui roadmap elektron dan kemungkinan berkontribusi.

Xvfb menyebalkan, Akan sangat bagus jika Electron mendukung true headless!

xvfb-mungkin sementara itu

Ada artikel baru dari Google: https://developers.google.com/web/updates/2017/04/headless-chrome

Ini akan segera datang.

Sepertinya Chrome 59 ada di saluran stabil sekarang. Apa langkah selanjutnya untuk mendukung headless di Electron?

Tolong, tolong buat ini menjadi kenyataan — dengan melakukan ini dan mengaktifkan NightmareJS untuk menjalankan Electron tanpa kepala, Anda pada akhirnya akan menghilangkan sepertiga dari semua kasus penggunaan Selenium.*

* Menjadi hiperbolik tetapi juga tidak terlalu

@aendrew Saya rasa NightmareJS bisa _ditulis ulang_ untuk menggunakan/menyertakan backend CDP sebagai gantinya, daripada kerfuffle membuat Electron (dengan filosofi: _build lintas platform aplikasi desktop _) tanpa kepala. Lihat: https://github.com/cyrus-and/chrome-remote-interface

@MrSaints Saya tidak iri dengan pengelola; mereka _just_ selesai mengubahnya dari PhantomJS seperti setahun yang lalu. Meskipun jika ada, mungkin itu motivasi yang baik untuk membuat lapisan browser Nightmare dapat dicolokkan ...

Terlepas dari itu, poin tentang Electron yang berorientasi desktop diambil dengan baik.

@aendrew @MrSaints Dengan risiko menyebarkan ketidaktahuan saya... Seberapa sulitkah perubahan ini (mendukung flag headless ) untuk diterapkan? Saya tidak yakin bagaimana Electron berinteraksi dengan/memperluas Chromium, tetapi menurut saya langkah-langkah untuk mengimplementasikannya adalah:

  1. Tingkatkan Chromium Electron ke versi 59+.
  2. Berikan parameter flag/konfigurasi baris perintah headless .
  3. Hal-hal lain yang jelas tidak saya perhitungkan. :)

Saya kira apa yang saya katakan adalah, dengan headless sekarang tersedia di Chromium, menerapkan mode tanpa kepala (misalnya untuk NightmareJS) tampaknya relatif mudah. Memang, versi Electron untuk keperluan umum mungkin membutuhkan waktu untuk menyelesaikan kasus penggunaan tertentu. Namun, untuk menghasilkan build yang dirancang untuk sesuatu seperti NightmareJS, seharusnya cukup mudah, bukan?

Jika saya memiliki kebutuhan mendesak untuk peningkatan kecepatan, saya akan terjun dan mencobanya. Namun, kami masih bertahan dengan NightmareJS apa adanya, jadi kami baik-baik saja untuk saat ini.

Terlepas dari itu, terima kasih kepada pengelola semua proyek ini atas kontribusi dan kerja keras mereka! :)

Mengenai NightmareJS: Saat ini kami sedang mengerjakan versi Nightmare yang dibangun di atas Chrome tanpa kepala bahkan mampu berjalan di lingkungan tanpa server seperti AWS Lambda. Kami akan segera membukanya @graphcool. 🚀

@schickling itu akan luar biasa!

Satu hal yang perlu diingat dengan --headless di chrome adalah menonaktifkan dukungan untuk semua plugin. Jadi, jika Anda membutuhkan flash (yang dapat dilakukan dengan elektron/mimpi buruk) atau penampil PDF, dll, --headless bukan untuk Anda dan Anda akan ingin menggunakan xvfb.

Saya tidak sabar untuk menjalankan Electron di AWS Lambda...Saya rasa

Amin @lastmjs Amin

Bagaimana dengan solusi ini?
https://github.com/dimkir/nightmare-lambda-tutorial

Belum dicoba

@xplodedthemes menggunakan versi xvfb yang telah dikompilasi sebelumnya

Steker tak tahu malu: https://github.com/joelgriffith/navalia. Ini dibangun di atas Chrome tanpa kepala untuk pengujian fungsional dan banyak lagi. Termasuk beberapa fitur bagus seperti memparalelkan banyak tugas, front-end GraphQL, dan banyak lagi.

Saya menyambut setiap PR/Masalah/Umpan Balik!

Hai semuanya! Maaf membuat kalian semua menunggu...

Kami baru saja membuka Chromeless . Ini didasarkan pada Chrome tanpa kepala dan berfungsi baik secara lokal maupun di AWS Lambda. API ini sangat mirip dengan NightmareJS.

Anda dapat mencobanya di sini: https://chromeless.netlify.com

Apakah Chromeless baru saja menggantikan Nightmare? Chromeless memiliki jalan panjang sebelum mengejar Nightmare.

Kami menggunakannya sebagai pengganti Nightmare karena kami membutuhkan kemampuan untuk menjalankan beberapa tes secara bersamaan.

Pertanyaan (mungkin tidak bagus untuk utas ini): apakah Anda mempertimbangkan untuk membuat fungsionalitas pdf berfungsi? Jika demikian, ini bisa menghemat TON sakit kepala (dan biaya).

Wow, itu luar biasa. Kerja bagus!

@zcbenz sepertinya solusi telah muncul untuk ini: apakah

Umm masalah ini masih sangat valid. "Solusi" semuanya melibatkan pemindahan Nightmare sepenuhnya.

Sepenuhnya setuju dengan @keithkml - solusinya, meskipun bermaksud baik (terima kasih!), Lebih sesuai dengan "alternatif" sampai solusi aktual disediakan. Sejalan dengan itu, apakah seseorang di sini memiliki keahlian yang cukup untuk menjawab pertanyaan yang saya ajukan di komentar saya

Saya masih tidak mengerti maksud dari tanggapan. Bisakah seseorang tolong beri saya klarifikasi bahwa apakah kita memiliki mode tanpa kepala NATIVE untuk aplikasi elektron untuk berjalan di CI atau tidak?

@hitliubo Chrome memiliki tanda --headless , tetapi hanya berfungsi jika Anda tidak menggunakan plugin seperti Flash atau pembaca PDF. Jika Anda, maka jawabannya adalah tidak ada afirmatif pada saat ini. Jika tidak , Anda dapat meneruskan tanda itu (bersama dengan --disable-gpu jika perlu - mereka memperbaiki implikasi yang hilang ini di Chrome versi IIRC yang lebih baru) saat membuat konteks browser dan melihat apakah itu berfungsi. (Perhatikan bahwa jika Anda menggunakan sesuatu seperti Nightmare dan Anda termasuk dalam kategori kedua, Anda benar-benar harus mengajukan masalah di masing-masing repo proyek itu jika belum ada.)

Bahkan jika Anda tidak dapat menggunakan --headless (atau jika tidak berhasil), ada beberapa opsi:

  • Windows: Kecuali Anda menggunakan sesuatu yang tidak jelas, Anda akan selalu memiliki konteks jendela untuk dirender. Windows Server 2016 menjatuhkan dukungan GUI default, tetapi masih mendukung pembuatan jendela GUI, dan AFAICT harus mendukung minimal untuk pengujian Selenium.
  • macOS: Anda akan selalu memiliki GUI di sini (dan dengan demikian memiliki konteks jendela untuk dirender). Apple tidak menyediakan versi yang tidak.
  • Linux: xvfb adalah server X tanpa kepala yang tersedia untuk hampir semua distro Linux umum (dan maksud saya "umum" cukup longgar di sini). Jika Anda menggunakan Travis, mereka memiliki petunjuk tentang cara menambahkannya ke proyek Anda .

@isiahmeadows Terima kasih atas informasinya. Saat ini saya memiliki aplikasi web yang berjalan di browser dan dengan chrome/firefox saya selalu dapat menambahkan --headless untuk pengujian tanpa kepala. Baru-baru ini kami ingin mengonversinya ke aplikasi Electron dan saya mencoba dengan --headless yang tidak berfungsi di macOS saya. Sekarang aku tahu alasanmu. Terima kasih!

Sebenarnya saya tidak suka solusi oleh xvfb karena itu bukan asli. Namun, mengingat kami tidak mendukung headless asli jadi saya rasa saya perlu mencobanya.

FYI - Sekarang saya menggunakan capybara untuk pengujian.

Itu akan bagus (y)

Apakah ada pembaruan tentang ini?

Saya dialihkan ke sini dari posting tentang rendering langsung ke buffer bingkai linux, tetapi ini tampaknya difokuskan pada pengujian tanpa kepala. Apakah ada kemajuan yang dibuat untuk merender secara langsung ke buffer bingkai _real_?

@quinn Saya cukup yakin Anda akan memerlukan server X, meskipun Anda dapat menjalankan X11 (Xorg) pada penyangga bingkai jika Anda mau (lihat: https://www.x.org/releases/current/ doc/man/man4/fbdev.4.xhtml).

_Sunting:_

Sebenarnya setelah melihat ini sedikit lebih, ini juga dapat dicapai dengan menggunakan ozon. ( https://github.com/jakwu/ozone-fb )

Menambahkan ozon juga akan memungkinkan dukungan wayland, fitur lain yang hilang karena sebagian besar distribusi Linux telah bermigrasi ke ini.

Berdasarkan deskripsi ozone-fb dan komentar @isiahmeadows , sepertinya akselerasi GPU tidak berfungsi jika di-render ke frame buffer.

@trusktr Itu komentar berusia 2 tahun. Saya akan merekomendasikan untuk tidak menganggap komentar saya sebagai otoritatif, karena itu bisa berubah (saya belum memeriksanya sejak saat itu).

Saya menambahkan lib tanpa kepala ke elektron dan memanggil HeadlessShellMain。
Lari:

e run  --headless --enable-logging --v=2 --disable-gpu --screenshot  http://192.168.50.206

maka itu menunjukkan:

Running "/home/a/dev0/e9.2.1/src/out/ReleaseSym0/electron --headless --enable-logging --v=2 --disable-gpu --screenshot http://192.168.50.206:8889"
[1028/172650.483932:INFO:cpu_info.cc(53)] Available number of cores: 4
[1028/172650.484061:VERBOSE1:zygote_main_linux.cc(217)] ZygoteMain: initializing 0 fork delegates
[1028/172650.484400:INFO:cpu_info.cc(53)] Available number of cores: 4
[1028/172650.484465:VERBOSE1:zygote_main_linux.cc(217)] ZygoteMain: initializing 0 fork delegates
[1028/172650.493514:VERBOSE1:webrtc_internals.cc(119)] Could not get the download directory.
[1028/172650.494623:VERBOSE1:proxy_config_service_linux.cc(500)] All gsettings tests OK. Will get proxy config from gsettings.
[1028/172650.494764:VERBOSE1:proxy_config_service_linux.cc(1261)] Obtained proxy settings from annotation hash code 11258689
[1028/172650.494873:VERBOSE1:proxy_config_service_linux.cc(500)] All gsettings tests OK. Will get proxy config from gsettings.
[1028/172650.494919:VERBOSE1:proxy_config_service_linux.cc(1261)] Obtained proxy settings from annotation hash code 11258689
[1028/172650.504033:VERBOSE1:sandbox_linux.cc(69)] Activated seccomp-bpf sandbox for process type: renderer.
[1028/172650.505596:VERBOSE2:thread_state.cc(470)] [state:0x556bd75583a0] ScheduleGCIfNeeded
[1028/172650.511468:VERBOSE2:thread_state.cc(470)] [state:0x556bd75583a0] ScheduleGCIfNeeded
[1028/172650.524408:VERBOSE2:thread_state.cc(470)] [state:0x556bd75583a0] ScheduleGCIfNeeded
[1028/172650.524916:VERBOSE2:thread_state.cc(470)] [state:0x556bd75583a0] ScheduleGCIfNeeded
[1028/172650.525173:VERBOSE2:thread_state.cc(470)] [state:0x556bd75583a0] ScheduleGCIfNeeded
[1028/172650.525963:VERBOSE1:sandbox_linux.cc(69)] Activated seccomp-bpf sandbox for process type: gpu-process.
[1028/172650.526373:VERBOSE2:thread_state.cc(470)] [state:0x556bd75583a0] ScheduleGCIfNeeded
[1028/172650.528735:VERBOSE2:thread_state.cc(470)] [state:0x556bd75583a0] ScheduleGCIfNeeded
[1028/172650.531839:VERBOSE2:thread_state.cc(470)] [state:0x556bd75583a0] ScheduleGCIfNeeded
[1028/172650.535051:ERROR:paint_controller.cc(646)] PaintController::FinishCycle() completed
[1028/172650.550076:VERBOSE1:configured_proxy_resolution_service.cc(873)] PAC support disabled because there is no system implementation
[1028/172650.550312:VERBOSE1:configured_proxy_resolution_service.cc(873)] PAC support disabled because there is no system implementation
[1028/172650.550923:VERBOSE1:network_delegate.cc(32)] NetworkDelegate::NotifyBeforeURLRequest: http://192.168.50.206:8889/
[1028/172650.575829:VERBOSE1:url_loader.cc(418)] To buffer: http://192.168.50.206:8889/
[1028/172650.580122:VERBOSE1:v8_context_snapshot.cc(153)] A context is created from snapshot for main world
[1028/172650.587399:VERBOSE1:v8_context_snapshot.cc(153)] A context is created from snapshot for main world
[1028/172650.595294:ERROR:paint_controller.cc(646)] PaintController::FinishCycle() completed
[1028/172650.612295:ERROR:paint_controller.cc(646)] PaintController::FinishCycle() completed
[1028/172650.676553:INFO:headless_shell.cc(620)] Written to file screenshot.png.

Apakah itu berarti headless telah diterapkan?

@bigben0123 itu menarik dan sangat mengasyikkan! Jadi Anda telah menyusun versi elektron Anda sendiri yang menggabungkan cangkang tanpa kepala dari kromium?

Sudahkah Anda menguji di lingkungan tanpa X di Linux untuk melihat apakah itu berfungsi?

Ketika chromium dijalankan dalam mode headless, sub-proses render dimulai dengan melewati —headless flag (Anda dapat melihat ini adalah Anda menggunakan 'ps args' dari memori). Apakah ini terjadi pada Anda?

(Anehnya dengan elektron saat ini jika Anda mencoba memulainya dengan —tanpa kepala, bendera tidak diteruskan ke proses render tetapi ke proses GPU.)

@bigben0123 itu menarik dan sangat mengasyikkan! Jadi Anda telah menyusun versi elektron Anda sendiri yang menggabungkan cangkang tanpa kepala dari kromium?

Sudahkah Anda menguji di lingkungan tanpa X di Linux untuk melihat apakah itu berfungsi?

Ketika chromium dijalankan dalam mode headless, sub-proses render dimulai dengan melewati —headless flag (Anda dapat melihat ini adalah Anda menggunakan 'ps args' dari memori). Apakah ini terjadi pada Anda?

(Anehnya dengan elektron saat ini jika Anda mencoba memulainya dengan —tanpa kepala, bendera tidak diteruskan ke proses render tetapi ke proses GPU.)

Ya, saya menjalankannya di ubuntu yang baru saja dimulai dalam mode perintah pengguna.
Tanpa kepala telah berlalu:

electron --headless --enable-logging --v=2 --disable-gpu -print-to-pdf http://www.google.com
electron --type=zygote --no-zygote-sandbox --enable-logging --headless --v=2 --headless
electron --type=zygote --enable-logging --headless --v=2 --headless
electron --type=zygote --enable-logging --headless --v=2 --headless
electron --type=gpu-process --field-trial-handle=15536072708541054845,15522400966085077738,131072 --enable-logging --headless --v=2 --headless --gpu-preferences=MAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAQAAAAAAAAAAAAAAAAAAAACAAAAAAAAAA= --use-gl=swiftshader-webgl --override-use-software-gl-for-tests --enable-logging --v=2 --shared-files
electron --type=utility --field-trial-handle=15536072708541054845,15522400966085077738,131072 --lang=en-US --service-sandbox-type=network --enable-logging --use-gl=swiftshader-webgl --v=2 --headless --enable-logging --v=2 --shared-files=v8_snapshot_data:100
electron --type=renderer --allow-pre-commit-input --enable-logging --v=2 --field-trial-handle=15536072708541054845,15522400966085077738,131072 --disable-databases --disable-gpu-compositing --lang=en-US --headless --lang=en-US --num-raster-threads=2 --enable-main-frame-before-activation --renderer-client-id=4 --shared-files=v8_snapshot_data:100
electron --type=broker

@ bigben0123 apakah Anda memiliki perubahan di suatu tempat? Bahkan jika ini tidak membuatnya menjadi inti elektron untuk beberapa alasan saya akan senang untuk dapat menggunakannya.

Komit ini hanya menggabungkan lib tanpa kepala chrome ke elektron dan Anda dapat menggunakannya dengan cara yang sama seperti chrome.
https://github.com/bigben0123/electron/commit/b6cad8993d68d39f1732aa6ed5ece0135b9ae0c8

Sejauh yang saya ketahui, chrome dan headless memiliki implementasi lapisan konten yang berbeda. Seperti dua shell browser, jika Anda memulai tanpa kepala, itu tidak ada hubungannya dengan chrome, kecuali Anda memulai dengan "chrome --headless".

Salah satu tujuan tanpa kepala adalah "Meminimalkan jumlah perubahan invasif atau spesifik tanpa kepala (misalnya, #ifdefs) ke basis kode Chromium".

Oleh karena itu, sulit untuk menerapkan bahwa elektron tanpa kepala untuk menghilangkan xvfb. Kami hanya dapat membiarkan elektron mendukung tanpa kepala, tetapi Anda tidak dapat menjalankan aplikasi elektron.

Kita dapat menggunakan implementasi tanpa kepala untuk menggantikan elektron untuk mendapatkan cabang tanpa kepala yang baru.

hapus ketergantungan dari electron/BUILD.gn:

      "//ui/events/devices/x11",
      "//ui/events/platform/x11",
      "//ui/gtk"  #all of gkt related

    if (use_x11) {
      deps += [
        "//ui/gfx/x",
        "//ui/gtk:x",
      ]
    }
    configs += [ ":gio_unix" ]
    configs += [ "//build/config/linux:x11" ]

ubah dengan:
"//ui/tampilan",
"//ui/acara/perangkat",

Apakah halaman ini membantu?
0 / 5 - 0 peringkat