2012-04-20 13 views
5

mam to:Link Kliknięcie JavaScript w Mechanize

<a class="top_level_active" href="javascript:Submit('menu_home')">Account Summary</a> 

chcę kliknąć tego linku, ale pojawia się błąd, gdy za pomocą link_to.

Próbowałem:

bot.click(page.link_with(:href => /menu_home/)) 
bot.click(page.link_with(:class => 'top_level_active')) 
bot.click(page.link_with(:href => /Account Summary/)) 

Błąd pojawia się: NoMethodError: metoda niezdefiniowany `[]” do zera: NilClass

Odpowiedz

13

To jest odsyłacz do javascript. Mechanize nie będzie w stanie go kliknąć, ponieważ nie ocenia javascript. Przepraszam!

Spróbuj dowiedzieć się, co dzieje się w przeglądarce po kliknięciu tego łącza. Czy tworzy on żądanie POST lub GET? Jakie są parametry wysyłane na serwer. Gdy już się o tym dowiesz, możesz emulować tę samą akcję w swoim skrypcie Mechanize. Narzędzia do Chrome Chrome/Firebug pomogą.

Jeśli to nie działa, spróbuj przełączyć się do biblioteki obsługującej ocenę javascript. Użyłem watir-webdriver do wielkiego sukcesu, ale można również wypróbować phantomjs, casperjs, pjscrape lub innych narzędzi

+0

dzięki użyłem posta, aby załadować stronę i to działało. – user1198316

1

Pierwsze 2 powinny pracowali więc spróbować, druk odchodzący HREF aby upewnić się, że naprawdę istnieje:

puts page.links.map(&:href) 

Pamiętaj, że tylko dlatego, że można go zobaczyć w przeglądarce nie znaczy, że pojawia się w odpowiedzi. Mogło zostać wysłane jako aktualizacja ajaxowa. Ponadto można po prostu zrobić to co moim zdaniem jest czystsze:

page.link_with(:href => /menu_home/).click 

Jednak nie sądzę, kliknięcie tego linku będą robić to, co chcesz, ponieważ jest to JavaScript.

0

Oto sposób, by go obsłużyć. Zakładamy, że strona zwraca zawartość:

puts page.body 
<HTML><SCRIPT LANGUAGE="JavaScript"><!-- 
    top.location="http://www.example.com/pages/myaccount/dashboard.aspx?"; 
// --></SCRIPT> 
<NOSCRIPT>Javascript required.</NOSCRIPT></HTML> 

Wiemy, że to nadchodzi tak wiemy, co do sprawdzenia:

link_search = %r{top.location="([^"]+)"} 
js_link = page.body.match(link_search)[1] 
page = agent.get(js_link) 
Powiązane problemy