CasperJS: Почему мой url изменяется примерно: пустым, когда загружается моя страница?

Я новичок в PhantomJS/CasperJS.

Я просто хочу начать сеанс и убедиться, что он в порядке.

Здесь мой код:

var casper = require('casper').create({
    verbose: true,
    logLevel: 'debug',
    pageSettings: {
        loadImages: false,
        loadPlugins: false,
        userAgent: 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36 Edge/12.0'
    }
});

casper.on('remote.message', function(msg) {
    this.echo('remote message caught: ' + msg);
});

casper.on("page.error", function(msg,trace) {
    this.echo("Page Error: " + msg, "ERROR");
});

casper.start('https://www.google.fr');

casper.then(function(){
    console.log('Page Loaded');
    this.test.assertTitle('Google', 'Welcome to Google');
});

casper.run();

Когда я запускаю этот простой script, я получаю:

C:\Users\Booky\Documents\nike_project>casperjs --ignore-ssl-errors=true --ssl-protocol=tlsv1 debug.js

C:\Users\Booky\Documents\nike_project>[info] [phantom] Starting...
[info] [phantom] Running suite: 3 steps
[debug] [phantom] opening url: https://www.google.fr/, HTTP GET
[debug] [phantom] Navigation requested: url=https://www.google.fr/, type=Other, willNavigate=true, isMainFrame=true
[debug] [phantom] url changed to "https://www.google.fr/"
[debug] [phantom] Successfully injected Casper client-side utilities
[debug] [phantom] start page is loaded
[info] [phantom] Step anonymous 3/3 https://www.google.fr/ (HTTP 200)
Page Loaded
[debug] [phantom] Navigation requested: url=about:blank, type=Other, willNavigate=true, isMainFrame=true
[debug] [phantom] url changed to "about:blank"

Я искал везде, и я не нашел ответа на мою проблему.


Окружающая среда

  • PhantomJS 2.1.1
  • CasperJS 1.1.0beta5

Ответ 1

Существуют открытые проблемы (см. обновление ниже) о CasperJS и PhantomJS Github Repos в отношении перенаправления на/открытие: пустая страница


  • - прокси-тип = нет аргумент командной строки

В Windows настройка прокси-сервера по умолчанию может вызвать массовую сеть (см. Известные проблемы в примечании к выпуску). Обходной путь полностью отключить прокси-сервер. путем запуска PhantomJS с --proxy-type = none аргумент командной строки. 1


Ваш код работал правильно, со следующими версиями:

  • PhantomJS 2.1.1
  • CasperJS 1.0.4
  • MacOSX

[info] [phantom] Starting...
[info] [phantom] Running suite: 3 steps
[debug] [phantom] opening url: https://www.google.fr/, HTTP GET
[debug] [phantom] Navigation requested: url=https://www.google.fr/, type=Other, lock=true, isMainFrame=true
[debug] [phantom] url changed to "https://www.google.fr/"
[debug] [phantom] Successfully injected Casper client-side utilities
[debug] [phantom] start page is loaded
[info] [phantom] Step 3/3 https://www.google.fr/ (HTTP 200)
Page Loaded
PASS Welcome to Google
[info] [phantom] Step 3/3: done in 262ms.
[info] [phantom] Done 3 steps in 341ms

Были некоторые проблемы с навигацией по страницам в casperjs 1.1.x beta и PhantomJS > 1.9.8, где была рекомендация понизить PhantomJS до 1.9.7


Я рекомендовал бы, если возможно, попробовать разные версии

Решение Github Issue 1485 или решение @Ross могут решить проблему - любые комментарии?

Ответ 2

У меня также был такой же загадочный журнал отладки для моего шага:

[debug] [phantom] Navigation requested: url=about:blank, type=Other, willNavigate=true, isMainFrame=true
[debug] [phantom] url changed to "about:blank"

В моем случае мне нужно было нажать кнопку "Отправить" в форме AJAX, которая была элементом ссылки с href='javascript:;'. Оказалось, это само по себе не было главной проблемой. Скорее всего, их веб-система была построена с помощью Java-инфраструктуры Apache Wicket, которая выдает сеансы с учетом состояния для каждого взаимодействия поиска. И это происходит через перенаправление - и это был ключевой момент здесь.

Теперь CasperJS поддерживает два двигателя PhantomJS и SlimerJS... При перекопании в документацию CasperJS я намотал эту связанную страницу Различия между SlimerJS и PhantomJS, который гласит:

'PhantomJS не выполняет перенаправления, тогда как SlimerJS делает.'

Для справки здесь были мои параметры, которые были настроены как наиболее свободные и с включенной отладкой (некоторые из них имеют значения по умолчанию):

var casper = require('casper').create({
    engine: 'slimmerjs',
    verbose: true,
    logLevel: 'debug',
    exitOnError: false,
    ignoreSslErrors: true,
    pageSettings: {
        javascriptEnabled: true,
        loadImages: true,
        loadPlugins: true,
        localToRemoteUrlAccessEnabled: true,
        userAgent: 'Mozilla/5.0 (X11; CrOS x86_64 8172.45.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.64 Safari/537.36',
        XSSAuditingEnabled: false,
        logLevel: 'debug'
    }
});