PhantomJS не может открыть сайт HTTPS

Я использую следующий код, основанный на примере loadpeed.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 прямо сейчас и считаю это слишком хорошим, чтобы прекратить играть, хотя я не продвигаюсь вперед с этой проблемой.

Ответ 1

Я попробовал ответы Фреда и Кэмерона Тинкера, но только --ssl-protocol = любая опция, кажется, помогает мне:

phantomjs --ssl-protocol=any test.js

Также я думаю, что было бы --ssl-protocol=any безопаснее использовать --ssl-protocol=any как вы все еще используете шифрование, но --ignore-ssl-errors=true игнорирует (duh) все ошибки ssl, включая вредоносные.

Ответ 2

Проблема, скорее всего, связана с ошибками 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. Надеюсь, это поможет.

Ответ 3

Обратите внимание, что по состоянию на 2014-10-16 PhantomJS по умолчанию использует SSLv3 для открытия соединений HTTPS. Недавно объявив уязвимость POODLE, многие серверы отключили поддержку SSLv3.

Чтобы обойти это, вы сможете запустить PhantomJS с помощью

phantomjs --ssl-protocol=tlsv1

Надеюсь, PhantomJS скоро будет обновлен, чтобы сделать TLSv1 по умолчанию вместо SSLv3.

Ответ 4

испытал ту же проблему...
--ignore-ssl-errors = yes было недостаточно, чтобы исправить это для меня, пришлось сделать еще две вещи:
1) изменить пользовательский агент
2) пробовал все ssl-протоколы, единственная работавшая была tlsv1 для рассматриваемой страницы
Надеюсь, это поможет...

Ответ 5

У меня возникла та же проблема (casperjs 1.1.0-beta3/phantomjs 1.9.7). Использование --ignore-ssl-errors = yes и -ssl-protocol = tlsv1 решили. Использование только одного из вариантов не помогло мне решить.

Ответ 6

Я получал

Ошибка создания контекста SSL "из phantomJS (работает на CentOS 6.6)

Сборка из источника исправила это для меня. Не забудьте использовать фантомы, которые вы создали. (вместо /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>

Ответ 7

Если кто-то использует Phantomjs с Sahi, параметр --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>

Ответ 8

Что относительно 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, так как не имеет значения для проверки самозаверяющего сертификата моих петлевых веб-серверов.

Ответ 9

Ни один из других ответов здесь не помог мне; может быть, что определенные сайты (сайты), с которыми я работал, были слишком разборчивы с их HTTP-заголовками. Вот что сработало:

var page = webpage.create();
page.customHeaders = {
    "Connection": "keep-alive"
};

Я узнал, что PhantomJS использовал "Keep-Alive" (заглавными), и связь не поддерживалась.:)

Ответ 10

Я получаю SSL Handshake Failed вчера. Я перепробовал множество комбинаций опций phantomJS (--ignore-ssl-errors=yes и т.д.), Но ни одна из них не сработала.

Обновление до phantomJS 2.1.1 исправило это.

Я использовал инструкции по установке phantomJS по адресу https://gist.github.com/julionc/7476620, изменив версию phantomJS на 2.1.1.

Ответ 11

На компьютере, на котором вы пытаетесь запустить phantomjs для подключения к удаленному серверу, запустите "openssl ciphers". Скопируйте и вставьте перечисленные шифры в параметр командной строки --ssl-ciphers = "". Это сообщает подключающемуся веб-серверу, какие шифры доступны для использования с вашим клиентом. Если вы не установите те из них, которые доступны на вашем компьютере, он может использовать любой шифр, который ваш компьютер не понимает, как современные браузеры, используемые по умолчанию.

Ответ 12

Цитата sudo yum -y установить gcc gcc-С++ make flex bison gperf ruby openssl-devel freetype-devel fontconfig-devel libicu-devel sqlite-devel libpng-devel libjpeg-devel git клон git://github.com/ariya/phantomjs.git cd phantomjs git checkout 2.0./build.sh cd bin/./phantomjs

Не пытайтесь это !! Он глупый PhantomJs> = 2.0.0 не имеет проблем с ssl. (Запрос ресурсов через https работает). Вы только потеряете время. PhantomJs <= 2.0.0 имеет эту проблему. Но у PhantomJs> = 2.0.0 есть проблемы с таблицами. Так что спасибо, но не спасибо.

Ответ 13

Единственное, что сработало для меня, это поднять фантомы с 1.9x до 2.x;)