PhantomJS не удается открыть сайт HTTPS
Я использую следующий код, основанный на loadspeed.пример js, чтобы открыть сайт https://, который также требует аутентификации http-сервера.
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();
});
}
его не удается загрузить страницу все время. Что здесь может быть не так? Защищенные сайты должны обрабатываться по-другому? Сайт может быть успешно доступен из браузера, хотя.
Я только начинаю с Phantom прямо сейчас и считаю, что это слишком хорошо, чтобы перестать играть, даже если я не двигаюсь вперед этот вопрос.
10 ответов:
я попробовал ответы Фреда и Кэмерона Тинкера, но только --ssl-протокол=любой опция, кажется, помогает мне:
phantomjs --ssl-protocol=any test.js
также я думаю, что это должно быть намного безопаснее использовать
--ssl-protocol=any
Как вы все еще используете шифрование, но--ignore-ssl-errors=true
будет игнорировать (duh) все ошибки ssl, в том числе вредоносные.
проблема скорее всего из-за ошибки SSL сертификата. Если вы начинаете phantomjs с -- ignore-ssl-errors=yes вариант, он должен продолжить загрузку страницы, как это было бы, если бы не было ошибок SSL:
phantomjs --ignore-ssl-errors=yes [phantomOptions] script.js [scriptOptions]
Я видел несколько веб-сайтов, имеющих проблемы с неправильной реализацией их SSL-сертификатов или они истекли и т. д. Полный список параметров командной строки для phantomjs доступен здесь: http://phantomjs.org/api/command-line.html. надеюсь, это поможет.
обратите внимание, что с 2014-10-16 годов PhantomJS по умолчанию использует SSLv3 для открытия HTTPS-соединений. С уязвимость пуделя недавно объявлено, что многие серверы отключают поддержку SSLv3.
чтобы обойти это, вы должны быть в состоянии запустить PhantomJS с:
phantomjs --ssl-protocol=tlsv1
надеюсь, PhantomJS будет обновлен в ближайшее время, чтобы сделать TLSv1 по умолчанию вместо SSLv3.
испытал ту же проблему...
-- игнорировать-ssl-ошибки=да не было достаточно, чтобы исправить это для меня, пришлось сделать еще две вещи:
1) изменить user-agent
2) пробовал все ssl-протоколы, единственный, который работал, был tlsv1 для рассматриваемой страницы
Надеюсь, это поможет...
Я испытал ту же проблему (casperjs 1.1.0-beta3/phantomjs 1.9.7). Используя --игнорировать-протокол SSL-ошибки=да и-SSL-протокол=TLSv1 защита ее решили. Использование только одного из вариантов не решило его для меня.
Если кто-то использует Phantomjs с Сахи
--ignore-ssl-errors
опция должна идти в вашем browser_types.XML-файл. Это сработало для меня.<browserType> <name>phantomjs</name> <displayName>PhantomJS</displayName> <icon>safari.png</icon> <path>/usr/local/Cellar/phantomjs/1.9.2/bin/phantomjs</path> <options>--ignore-ssl-errors=yes --debug=yes --proxy=localhost:9999 /usr/local/Cellar/phantomjs/phantom-sahi.js</options> <processName>"PhantomJS"</processName> <capacity>100</capacity> <force>true</force> </browserType>
Я получал "ошибка создания контекста SSL" от phantomJS (работает на CentOS 6.6)
здание из источника исправлено для меня. Не забудьте использовать phantomjs, который вы построили. (вместо /usr / local/bin / phantomjs, если он у вас есть)
sudo yum -y install gcc gcc-c++ make flex bison gperf ruby openssl-devel freetype-devel fontconfig-devel libicu-devel sqlite-devel libpng-devel libjpeg-devel git clone git://github.com/ariya/phantomjs.git cd phantomjs git checkout 2.0 ./build.sh cd bin/ ./phantomjs <your JS file>
А как же
shebang
?если вы используете shebang для выполнения
phantomjs
скрипты, используйте следующую строку shebang#!/usr/bin/phantomjs --ignore-ssl-errors=yes var system = require('system'); var webpage = require('webpage'); // ... rest of your script
используйте любой из приведенных выше ответов. мне лично нравится
--ignore-ssl-errors=yes
так как это не имеет значения для проверки самозаверяющего сертификата моих веб-серверов loopback.
ни один из других ответов здесь не помог мне; возможно, что конкретные сайты, с которыми я работал, были слишком разборчивы с их заголовками HTTP. Вот что получилось:
var page = webpage.create(); page.customHeaders = { "Connection": "keep-alive" };
я узнал, что PhantomJS использовал "Keep-Alive" (с заглавной буквы), и соединение не поддерживалось. :)
Я получил
SSL Handshake Failed
вчера. Я пробовал много комбинаций опций phantomJS (--ignore-ssl-errors=yes
etc.), но ни один из них не работал.обновление до phantomJS 2.1.1 исправлено.
я использовал инструкции по установке phantomJS в https://gist.github.com/julionc/7476620, изменение версии phantomJS на 2.1.1.