2014-02-19 2 views
3

У меня есть форма с динамическим вводом, который необходимо заполнить. Проблема в том, что для заполнения формы мне нужно посетить другую страницу, чтобы получить данные, которые зависят от ввода на предыдущей странице. Поэтому после того, как я получил данные, а затем добавил их в форму, форма уже изменена, поэтому мне нужно сохранить эту форму открытой, пока я получаю данные для нее. Вопрос в том, как это сделать?CasperJS/PhantomJS как сохранить старую страницу открытой?

+1

Не получил весь сценарий. Можете ли вы привести пример? –

+0

Итак, у вас есть форма, содержащая captcha (2 + 2/image), чтобы ее решить, вам нужно отправить запрос на скрипт, который может это сделать. Как отправить и получить запрос, когда форма открыта? – Randomius

ответ

0

Может быть, с casper.back() и casper.forward(): https://github.com/n1k0/casperjs/blob/master/tests/suites/casper/history.js Я считаю, что ваша предыдущая форма будет сохранена в предыдущих step.I надеюсь, попробуйте.

Edit: GetData (NEWPAGE) был примером своего метода Casper, вы могли бы попробовать что-то вроде этого:

var password ="wtoc95a"; 

casper.getData = function (newPage, previousPageInputData) { 
    //visit another page 
    casper.open(newPage) 
    //or casper.open(newPage+previousPageInputData) if the new page opened use the previous input 
    .then(function() { 
      //here you do what you want using "input" argument of the previous page 
      //just return the data you need to fill the form 
    }); 
    return dataNeeded; 
}; 

And in your form : 
this.fill('form[id="signup_frm"]', { 
       nick_name: "pseudo", 
       e_mail: "mail", 
       password: "password", 
       password2: password, 
       input : casper.getData(arg1,arg2) 

http://docs.casperjs.org/en/1.1-beta2/extending.html

+0

Нет. После использования casper.back(); появляется другая форма. Я использую casper.back(); дважды. – Randomius

+0

Ну, это просто повторяет старый шаг. И если вы попытаетесь позвонить своему собственному методу, чтобы получить данные и вернуть их. В вашем сценарии, когда вы заполните форму, вызовите casper.getData (newPage), чтобы заполнить ее. – Fanch

+0

Где я могу прочитать о casper.getData? – Randomius

0

Вы могли бы создать два экземпляра Каспер. Если ваш первый экземпляр будет иметь первую страницу, а при необходимости создайте другой экземпляр и получите данные от него. Храните данные в глобальном масштабе.

Сделать waitFor до тех пор, пока значение переменной не будет установлено в первом экземпляре.

+0

Я пробовал несколько методов для создания второго экземпляра. Во-первых, я попытался создать два экземпляра сразу, а CasperJS/PhantomJS работает только с последним, игнорируя первый. Во-вторых, я помещаю второй экземпляр в функцию и запускаю его, когда это необходимо, поскольку результат = не работает. Можете ли вы показать мне рабочий пример, пожалуйста? - – Randomius

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