2015-02-13 16 views
6

Ben PhantomJS aşina alıyorum. Ama bir şey alamıyorum. Basit bir form ile bir sayfa var:PhantomJS ile nasıl bir form gönderilir?

<FORM action="save.php" enctype="multipart/form-data" method="GET" onSubmit="return doSubmit();"> 
    <INPUT name="test_data" type="text"> 
    <INPUT name="Submit" type="submit" value="Submit"> 
</FORM> 

ve save.php sadece ben yapıyorum bu yüzden

test_data değeri aşağı yazıyor:

page.evaluate(function() { 
    document.forms[0].test_data.value="555"; 
    doSubmit(); 
}); 

sayfa I render Metin alanının 555 olduğunu, ancak formun gönderilmediğini ve save.php'nin bir test_data değeri yazmamış olduğunu görüyoruz. Yani doSubmit() çalışmıyor, değil mi? doSubmit() basit bir doğrulama adımıdır ve gönderimin sonraki sayfayı yüklemesi beklenir.

Yani soru şudur: PhantomJS kullanarak sayfada bir javascript kodunu nasıl çalıştırabilirim?

+0

'işlevi doSubmit() { \t \t \t if (document.forms [0] .test_data.value == "") \t {\t \t \t alert ("Alanı doldurun!"); yanlış \t \t dönüş; \t \t true; } 'İşte benim soru göndermeye unuttum üzgün. Sadece doğrulama yapıyor. – user3416803

+0

Oh, şimdi anlıyorum. Bu yüzden sadece JS ile gönder düğmesine basmalıyım? Neyse. Fonksiyonu çalıştırmam gerekirse, bu şekilde mi çalışacak yoksa başka bir yaklaşım var mı? Topaldığım için üzgünüm. – user3416803

+1

Olası kopyası [PhantomJS kullanarak nasıl bir form gönderilir] (http://stackoverflow.com/questions/9246438/how-to-submit-a-form-using-phantomjs) –

cevap

9

formu göndermek istediğiniz gibi görünüyor. Sen, farklı şekillerde Bunu başarmak sayfa bağlamında clicking the submit button

  • submit the form

    • gibi olabilir:

      page.evaluate(function() { 
          document.forms[0].submit(); 
      }); 
      
    • veya form metin alanına odaklanmak ve sendEvent() ile girmek tuşa basma gönderin.

    Bundan sonra, sonraki sayfa yüklenene kadar beklemeniz gerekecektir. Bu en iyi sağ formu göndermeden önce (sonra kalan komut içerir) page.onLoadFinished kayıt yapılır.

    page.open(url, function(){ 
        page.onLoadFinished = function(){ 
         page.render("nextPage.png"); 
         phantom.exit(); 
        }; 
        page.evaluate(function() { 
         document.forms[0].test_data.value="555"; 
         document.forms[0].submit(); 
        }); 
    }); 
    

    veya sadece bekleyebilir:

    page.open(url, function(){ 
        page.evaluate(function() { 
         document.forms[0].test_data.value="555"; 
         document.forms[0].submit(); 
        }); 
        setTimeout(function(){ 
         page.render("nextPage.png"); 
         phantom.exit(); 
        }, 5000); // 5 seconds 
    }); 
    
  • +0

    Garip ama en basitini gördüğüm gibi yöntem document.forms [0] .submit(); ama işe yaramıyor. – user3416803

    +0

    Hayır, 2.0.0 kullanarak i'am, sonuncusu gibi görünüyor. Belki sorun başka bir yerdedir? – user3416803

    +0

    Lütfen ['onConsoleMessage'] 'e (http://phantomjs.org/api/webpage/handler/on-console-message.html), [' onError']' a kayıt olun (http://phantomjs.org/api/ web sayfası/işleyici/on-error.html), ['onResourceError'] (http://phantomjs.org/api/webpage/handler/on-resource-error.html), [' onResourceTimeout'] (http: // phantomjs.org/api/webpage/handler/on-resource-timeout.html) olaylar. Belki de hatalar vardır. –

    İlgili konular