2016-01-12 3 views
-1

Я работал над небольшим сценарием, используя casperjs, который мог бы анализировать простую страницу с элементами, прилагаемыми к форме AJAX. Как я мог это сделать?Как анализировать элементы, добавленные AJAX, используя casperjs?

Это не похоже на работу (CoffeeScript):

getLinks = -> 
    links = document.querySelectorAll('a') 
    Array::map.call links, (e) -> 
    e.getAttribute 'href' 

casper = require('casper').create() 

casper.start 'somepage', -> 
    @fill '#some-form', {text: 'hello'}, true 
    # appends an element on success 

casper.then -> 
    links = @evaluate(getLinks) 
    @echo links[0] 

casper.run -> 
    @exit() 

EDIT:

Отправка формы с использованием Casper следует действие формы, а это означает, что он перенаправляет на пустую страницу с json вместо того, чтобы ловить его в ajax:success, как это происходит, когда я делаю это вручную через браузер. Форма имеет метод post и перезаписывается в javascript для отправки запроса AJAX и добавления элемента в DOM при успешном завершении. Я попытался изменить настройку javascriptEnabled, но по умолчанию это true.

TL; DR При отправке формы с использованием casper не запускается javascript, а выполняется вручную (или в консоли браузера).

+0

Какую версию PhantomJS вы используете? Пожалуйста, зарегистрируйтесь на события 'resource.error',' page.error', 'remote.message' и' casper.page.onResourceTimeout' ([Пример] (https://gist.github.com/artjomb/4cf43d16ce50d8674fdf#file -2_caspererrors-JS)). Возможно, есть ошибки. –

+0

. Лучше, зарегистрировались ли вы в событиях ошибки, чтобы увидеть, может ли, например, некоторая JS не может быть выполнена? Кроме того, важно знать, какую версию PhantomJS вы используете. –

+0

Большое спасибо. Просто начал использовать это сегодня, слишком поспешил подумать о правильной отладке. –

ответ

0

Вау, спасибо @Artjom B.

Проблема была стандартная проблема phantomjs SSL, сайт загружается с помощью JQuery https, подписавшись на resource.error помог мне найти это.

Решение должно было бежать casperjs с флагом --ignore-ssl-errors=true.

Смежные вопросы