2012-08-23 9 views
5

Wieczór! Próbuję zalogować się do witryny z zombie.js, ale wydaje mi się, że nie mogę tego zrobić. Aha i strona jest w języku fińskim, ale nie jest to trudne do zrozumienia, dwa pola tekstowe i przycisk. Pierwsza to nazwa użytkownika, druga hasło, a przycisk to przycisk logowania.Wypełnianie logu w formie z zombie w pliku node.js

W tej chwili mój dziennik w kodzie jest następujący:

var Browser = require("zombie"); 
browser = new Browser(); 
browser.visit("https://www.nordnet.fi/mux/login/startFI.html?cmpi=start-loggain", 
    function() { 
     // Here I check the title of the page I'm on. 
     console.log(browser.text("title")); 
     // Here I fill the needed information. 
     browser.document.getElementById("input1").value ="MYUSERNAME"; 
     browser.document.getElementById("pContent").value ="MYPASSWORD"; 
     // And here it fails. I try to submit the form in question. 
     browser.document.getElementById("loginForm").submit(); 
     setTimeout(function() { 
      // This is here to check that we've submitted the info and have been 
      // redirected to a new website. 
      console.log(browser.text("title")); 
     }, 2000); 
}); 

Teraz wiem, że może powinna była zastosować własne „wypełnić” metody Zombie, ale starałem że bez powodzenia więc spróbowałem czegoś nowego .

All I dostać się z to błąd:

Y:\IMC\Development\Web\node_modules\zombie\lib\zombie\forms.js:72 
    return history._submit(_this.getAttribute("action"), _this.getAttribute(
       ^
TypeError: Cannot call method '_submit' of undefined 

Teraz jeśli loguję że browser.document.getElementById("loginForm") wyraźnie robi znaleźć formę, ale niestety, nie podoba mi się z jakiegoś powodu.

Próbowałem również "konwencjonalnej" metody z zombie, która używa przycisku logowania na stronie internetowej i naciskając go. Problem polega na tym, że w rzeczywistości nie jest to przycisk, tylko obraz z dołączonym do niego linkiem, a wszystko to jest wewnątrz <span>. I nie mam pojęcia, jak mogę "kliknąć" ten przycisk.

Nie ma na nim żadnego identyfikatora, więc nie mogę tego użyć, a następnie spróbowałem użyć tego tekstu, ale ponieważ ma na nim umlauty, nie mogę go uruchomić. Ucieczki A z/344 tylko dał błąd:

throw new Error("No BUTTON '" + selector + "'"); 
     ^
Error: No BUTTON 'Kirjaudu sisään' 

Więc tak, że nie działa, choć nie mam pojęcia, dlaczego nie prawidłowo rozpoznać uciekł umlaut.

To jest moje pierwsze pytanie, drugie jest nieznaczne, ale nie wiem, dlaczego tu nie napisać tego tekstu.

Jeśli mam to wszystko do roboty, czy mogę jakoś skopiować plik cookie, który daje mi to logowanie, i użyć go w moim YQL do skasowania ekranu? Zasadniczo próbuję ocierać się o wartości giełdowe, ale bez logowania wartości są odłożone o 15 minut, co nie jest złe, ale chciałbym, aby tak było na żywo.

+0

Zobacz http://zombie.labnotes.org/ – John

Odpowiedz

7

Po kilku testach wykorzystujących zombie doszedłem do wniosku, że jest jeszcze za wcześnie, aby użyć go do poważnych testów. Niemniej jednak wpadłem na działający przykład przesłania formularza (przy użyciu zwykłej metody .submit()).

var Browser = require("zombie"); 
var assert = require("assert"); 

browser = new Browser() 
browser.visit("http://duckduckgo.com/", function() { 
    // fill search query field with value "zombie" 
    browser.fill('input[name=q]', 'mouse'); 
    // **how** you find a form element is irrelevant - you can use id, selector, anything you want 
    // in this case it was easiest to just use built in forms collection - fire submit on element found 
    browser.document.forms[0].submit(); 
    // wait for new page to be loaded then fire callback function 
    browser.wait().then(function() { 
     // just dump some debug data to see if we're on the right page 
     console.log(browser.dump()); 
    }) 
}); 

Jak widać, wskazówką jest użycie skonstruować browser.wait().then(...) po wysłaniu formularza inaczej browser obiekt będzie nadal odnoszą się do pierwotnej stronie (jednej przekazany jako argument do visit metoda). Uwaga: obiekt historii będzie zawierał adres strony, na którą przesłałeś swój formularz, nawet jeśli nie czekasz na załadowanie strony - to trochę mnie zdezorientowało, ponieważ byłem pewien, że powinienem już zobaczyć nową stronę na stronie.


Edit: Na swojej stronie, zombie wydaje się działać ok (mogę przesłać formularz i dostać "zły login lub hasło" alert). Istnieje kilka błędów JS, ale zombie nie jest nimi zainteresowany (należy jednak debugować te, aby sprawdzić, czy skrypt działa poprawnie dla zwykłych użytkowników).Tak czy inaczej, oto skrypt użyłem:

var Browser = require("zombie"); 
var assert = require("assert"); 

browser = new Browser() 
browser.visit("https://www.nordnet.fi/mux/login/startFI.html?cmpi=start-loggain", function() { 
    // fill in login field 
    browser.fill('#input1', 'zombie'); 
    // fill in password field 
    browser.fill('#pContent', 'commingyourway'); 
    // submit the form 
    browser.document.forms[0].submit(); 
    // wait for new page to be loaded then fire callback function 
    browser.wait().then(function() { 
     console.log('Form submitted ok!'); 
     // the resulting page will be displayed in your default browser 
     browser.viewInBrowser(); 
    }) 
}); 

Jak marginesie: podczas gdy ja starałem się wymyślić przykład pracy Próbowałem stronach użytkowników następująco (wszystko udało z różnych powodów):

  • google.com - mimo że wypełniłem pole zapytania łańcuchem i przesłałem formularz, nie otrzymałem wyników wyszukiwania. Powód? Prawdopodobnie Google podjęło pewne kroki, aby zapobiec automatycznym narzędziom (takim jak zombie) do przeglądania wyników wyszukiwania.
  • bing.com - taka sama jak google - po przesłaniu formularza nie dostałem wyników wyszukiwania. Powód? Prawdopodobnie to samo, co w przypadku google.
  • paulirish.com - Po wypełnieniu pola wyszukiwania i przesłaniu formularza zombie napotkał błędy skryptu, które uniemożliwiły mu ukończenie strony (coś o brakującym skrypcie skryptów ActiveX).
  • perfectionkills.com - Zaskakująco tutaj spotkałem się z tymi samymi problemami, co w przypadku strony irlandzkiego Paula - strona z wyników wyszukiwania nie mogła zostać załadowana z powodu błędów javascript.

Wniosek: To nie jest tak łatwo zmusić do zombie robi swoją pracę mimo wszystko ... :)

+0

Rzeczywiście zombie wydaje się być raczej niekompletne. Nie mogłem zmusić tego kodu do działania z powodu błędu Hierarchii, który puszcza do mnie jsdom, ale wciąż nie mam pojęcia, dlaczego nie mogę użyć tej samej techniki na mojej stronie. –

+0

Przez "ten fragment kodu" rozumiesz kod z mojego przykładu? W każdym razie opublikuj link do swojej strony, jeśli jest dostępny dla szerokiej publiczności, a ja spróbuję przemieścić to z zombie :) – WTK

+0

Tak, miałem na myśli twój kod. Oto strona, jeśli jesteś zainteresowany: https://www.nordnet.fi/mux/login/startFI.html?cmpi=start-loggain Jest to wersja fińska, ale strona nie jest zbyt skomplikowana. Nazwa użytkownika i hasło oraz przycisk do logowania: p –