2015-09-21 5 views
0

Я пытаюсь заполнить эту форму, используя CasperJS. Я хотел бы ввести электронное письмо и нажать «Разблокировать этот обзор».Заполните форму с CasperJS

enter image description here

Проверка кода с использованием кода элемента на Chrome, я получаю следующее:

<input id="email" type="text" class="emailAddr focusClear" value="Enter your email address" defaultvalue="Enter your email address" onblur="return ta.call('ta.common.search.defaultOnBlur', event);" onkeydown="return ta.util.keys.onEnterKeyClickSibling(event, '.submitBtn');" onfocus="ta.trackEventOnPage('overlay_registration_email_only', 'focused', '', '39415', false); return ta.call('ta.common.search.clearOnFocus', event);"> 
<div class="submitBtn rndBtn rndBtnGreen rndBtnLarge taLnk" onclick="ta.servlet.OverlayRegistration.submitEmailOnlySignup(event, ta.id('emailOnlySignup'), oreg_options);">Unlock this review</div> 

не имеют большой опыт работы с CasperJS, код, который я пытаюсь использовать для отправьте эту форму:

this.sendKeys('input[id="email"]', '[email protected]'); 

У меня проблема с селектором, но я не уверен. Это URL я проверяю, и вы получите эту форму при нажатии кнопки «Дополнительно» в обзоре, когда вы не вошли в

http://www.tripadvisor.com/Restaurant_Review-g187497-d782630-Reviews-Restaurante_El_Mussol-Barcelona_Catalonia.html

Это полный код, который я использую:.

var casper = require("casper").create({ 
    pageSettings: { 
     userAgent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:23.0) Gecko/20130404 Firefox/23.0" 
    } 
}); 

var url = 'http://www.tripadvisor.com/Restaurant_Review-g187497-d782630-Reviews-Restaurante_El_Mussol-Barcelona_Catalonia.html'; 

casper.start(url, function() { 
    this.echo('ok'); 
    this.click("span.taLnk.hvrIE6.tr299457563.moreLink.ulBlueLinks"); 
    this.echo('ok2'); 
    this.capture('test-screen1.png'); 
}).wait(15000).then(function() { 
     this.echo('ok3'); 
     this.capture('test-screen2.png'); 
     /**this.fill('input.emailAddr', { 
     'email': '[email protected]' 

     });*/ 
     this.echo('ok4'); 
     this.sendKeys('input[value="email"]', '[email protected]'); 
     this.echo('ok5'); 
     this.capture('test-screen3.png'); 

     }).wait(5000).then(function() { 
      this.echo('ok5'); 
      this.capture('test-screen4.png'); 

}); 

/**fs.write(path,content,'w')**/ 
casper.run(); 

Я никогда не достигаю 'ok5', и форма не заполняется. Я подозреваю, что в селекторе CSS я делаю что-то неправильно.

+0

Вы не сказали, в чем проблема. Кроме того, сделали снимок экрана? Пожалуйста, покажите большую часть кода. –

+0

Я добавил полный сценарий, который я использую, и еще несколько объяснений. – aruizga

+0

Возможный дубликат [Как получить доступ к iframe от CasperJS?] (Http://stackoverflow.com/questions/12150194/how-do-i-access-an-iframe-from-casperjs) –

ответ

1

Вы не можете получить доступ к полю электронной почты из-за этого всплывающего окна, открытого в iframe. Для работы с фреймов смотрите в документации: http://docs.casperjs.org/en/latest/modules/casper.html#withpopup

код должен быть что-то вроде этого:

casper 
    .start(url, function() { 
     this.echo('ok'); 
     this.click("span.taLnk.hvrIE6.tr299457563.moreLink.ulBlueLinks"); 
     this.echo('ok2'); 
     this.capture('test-screen1.png'); 
    }) 
    .waitForPopup(/Registration/, function() { 
     this.echo("Popup opened"); 
    }) 
    .withPopup(/Registration/, function() { 
     this.echo('ok5'); 
     this.capture('test-screen3.png'); 
     this.sendKeys('#email', '[email protected]'); 
     this.click('#emailOnlySignup .submitBtn'); 
    }) 
+0

Может ли кто-нибудь показать мне пример о том, как его реализовать? :) – aruizga

+0

Функция Iframe URL выглядит следующим образом: http://www.tripadvisor.com/Registration?source=OverlayRegistration&flow=EMAIL_ONLY_SIGNUP_OVERLAY&action=GET_EMAIL_ONLY_SIGNUP&pid=39415&category=overlay_registration_email_only&detail=782630&geo=187497&curUrl=http%253A__2F____2F__www__2E__tripadvisor__2E__com__2F__Restaurant__5F__Review__2D__g187497__2D__d782630__2D__Reviews__2D__Restaurante__5F__El__5F__Mussol__2D__Barcelona__5F__Catalonia__2E__html -> как я к нему доступ в поток? – aruizga

+0

@aruizga Я добавил пример – imos

0

Ok получил это работает, спасибо за головы с IFRAME. Если вы видите какие-либо улучшения, дайте мне знать :)

var casper = require("casper").create({ 
    pageSettings: { 
     userAgent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:23.0) Gecko/20130404 Firefox/23.0" 
    } 
}); 

var url= 'http://www.tripadvisor.com/Registration?source=OverlayRegistration&flow=EMAIL_ONLY_SIGNUP_OVERLAY&action=GET_EMAIL_ONLY_SIGNUP&pid=39415&category=overlay_registration_email_only&detail=782630&geo=187497&curUrl=http%253A__2F____2F__www__2E__tripadvisor__2E__com__2F__Restaurant__5F__Review__2D__g187497__2D__d782630__2D__Reviews__2D__Restaurante__5F__El__5F__Mussol__2D__Barcelona__5F__Catalonia__2E__html'; 
casper.start(url, function() { 
    this.echo('ok'); 
    this.capture('test-screen1.png'); 
    this.sendKeys('input[id="email"]', '[email protected]'); 
    this.echo('ok2'); 
    this.capture('test-screen2.png'); 
    this.click("div.submitBtn.rndBtn.rndBtnGreen.rndBtnLarge.taLnk") 
    this.echo('ok3'); 

    this.then(function() { 
    var url = 'http://www.tripadvisor.com/Restaurant_Review-g187497-d782630-Reviews-Restaurante_El_Mussol-Barcelona_Catalonia.html'; 
    this.start(url, function() { 
    this.echo('ok4'); 
    this.click("span.taLnk.hvrIE6.tr299457563.moreLink.ulBlueLinks"); 
    this.echo('ok5'); 
    this.capture('test-screen3.png'); 
}).wait(15000).then(function() { 
     this.echo('ok6'); 
     this.capture('test-screen4.png'); 

     }); 
}); 


    }); 



/**fs.write(path,content,'w')**/ 
casper.run(); 
Смежные вопросы