Saya menggunakan kode berikut berdasarkan contoh loadspeed.js untuk membuka situs https: // yang memerlukan otentikasi server http juga.
var page = require('webpage').create(), system = require('system'), t, address;
page.settings.userName = 'myusername';
page.settings.password = 'mypassword';
if (system.args.length === 1) {
console.log('Usage: scrape.js <some URL>');
phantom.exit();
} else {
t = Date.now();
address = system.args[1];
page.open(address, function (status) {
if (status !== 'success') {
console.log('FAIL to load the address');
} else {
t = Date.now() - t;
console.log('Page title is ' + page.evaluate(function () {
return document.title;
}));
console.log('Loading time ' + t + ' msec');
}
phantom.exit();
});
}
Ini gagal memuat halaman sepanjang waktu. Apa yang salah di sini? Apakah situs yang diamankan akan ditangani secara berbeda? Situs ini berhasil diakses dari browser.
Saya baru memulai dengan Phantom sekarang dan merasa terlalu bagus untuk berhenti bermain-main meskipun saya tidak bergerak maju dengan masalah ini.
sumber
Masalahnya kemungkinan besar karena kesalahan sertifikat SSL. Jika Anda memulai phantomjs dengan opsi --ignore-ssl-error = yes , itu akan melanjutkan untuk memuat halaman seperti jika tidak ada kesalahan SSL:
Saya telah melihat beberapa situs web mengalami masalah dengan penerapan sertifikat SSL mereka yang salah atau telah kedaluwarsa, dll. Daftar lengkap opsi baris perintah untuk phantomjs tersedia di sini: http://phantomjs.org/api/command-line. html . Saya harap ini membantu.
sumber
phantomjs --ignore-ssl-errors=yes script.js
--ignore-ssl-errors=yes
opsi harus ada sebelum nama skrip. Terima kasih telah menunjukkan hal ini.Perhatikan bahwa mulai 2014-10-16, PhantomJS secara default menggunakan SSLv3 untuk membuka koneksi HTTPS. Dengan kerentanan POODLE yang baru - baru ini diumumkan, banyak server menonaktifkan dukungan SSLv3.
Untuk menyiasatinya, Anda harus dapat menjalankan PhantomJS dengan:
Mudah-mudahan, PhantomJS akan segera diperbarui untuk menjadikan TLSv1 sebagai default, bukan SSLv3.
sumber
mengalami masalah yang sama ...
--ignore-ssl-error = yes tidak cukup untuk memperbaikinya bagi saya, harus melakukan dua hal lagi:
1) ubah user-agent
2) coba semua ssl-protocols, satu-satunya yang berfungsi tlsv1 untuk halaman tersebut
Semoga ini bisa membantu ...
sumber
Saya mengalami masalah yang sama (casperjs 1.1.0-beta3 / phantomjs 1.9.7). Menggunakan --ignore-ssl-error = yes dan --ssl-protocol = tlsv1 menyelesaikannya. Menggunakan hanya satu opsi tidak menyelesaikannya bagi saya.
sumber
Saya menerima
Membangun dari sumber memperbaikinya untuk saya. Jangan lupa untuk menggunakan phantomjs yang Anda buat. (alih-alih / usr / local / bin / phantomjs jika Anda memilikinya)
sumber
Jika seseorang menggunakan Phantomjs dengan Sahi,
--ignore-ssl-errors
opsi harus masuk ke file browser_types.xml Anda. Itu berhasil untuk saya.sumber
Tentang apa
shebang
?Jika Anda menggunakan shebang untuk mengeksekusi
phantomjs
skrip, gunakan baris shebang berikutGunakan salah satu jawaban di atas. Saya pribadi suka
--ignore-ssl-errors=yes
karena tidak relevan untuk memvalidasi sertifikat yang ditandatangani sendiri oleh server web loopback saya.sumber
Tidak ada jawaban lain di sini yang membantu saya; mungkin situs tertentu yang saya kerjakan terlalu pilih-pilih dengan header HTTP-nya. Inilah yang berhasil:
Saya menemukan bahwa PhantomJS menggunakan "Keep-Alive" (huruf besar), dan koneksi tidak dipertahankan. :)
sumber
Saya mendapatkan
SSL Handshake Failed
kemarin. Saya mencoba banyak kombinasi opsi phantomJS (--ignore-ssl-errors=yes
dll.), Tetapi tidak ada yang berhasil.Mengupgrade ke phantomJS 2.1.1 memperbaikinya.
Saya menggunakan petunjuk instalasi phantomJS di https://gist.github.com/julionc/7476620 , mengubah versi phantomJS ke 2.1.1.
sumber
Pada mesin tempat Anda mencoba menjalankan phantomjs untuk terhubung ke server jauh, jalankan "openssl ciphers." Salin dan tempel cipher yang terdaftar ke opsi baris perintah --ssl-ciphers = "". Ini memberi tahu server web yang menghubungkan cipher mana yang tersedia untuk digunakan untuk berkomunikasi dengan klien Anda. Jika Anda tidak menyetel yang tersedia di mesin Anda sendiri, itu dapat menggunakan sandi apa pun yang tidak dipahami mesin Anda yang dilakukan browser modern default yang digunakan untuk setelan default.
sumber
Satu-satunya hal yang berhasil bagi saya adalah meningkatkan phantomjs dari 1.9x menjadi 2.x;)
sumber