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 101

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.