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'
}
});