2012-04-20 22 views
5

tengo esto:enlace Al hacer clic con el JavaScript en Mechanize

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

quiero hacer clic en ese enlace, pero me sale un error al utilizar link_to.

He intentado:

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/)) 

El error que consigo es: NoMethodError: método no definido `[]' para nada: NilClass

Respuesta

13

Ese es un enlace javascript. Mechanize no podrá hacer clic en él, ya que no evalúa javascript. ¡Lo siento!

Trate de averiguar qué sucede en su navegador cuando hace clic en ese enlace. ¿Crea una solicitud POST o GET? ¿Cuáles son los parámetros que se envían al servidor? Una vez que lo sepa, puede emular la misma acción en su script Mechanize. Las herramientas de desarrollo de Chrome/Firebug ayudarán.

Si eso no funciona, intente cambiar a una biblioteca que admita la evaluación de JavaScript. He usado watir-webdriver con gran éxito, pero también se puede probar phantomjs, casperjs, pjscrape, u otras herramientas de

+0

gracias, he usado un puesto para cargar la página y funcionó. – user1198316

1

2 La primera debería haber trabajado tan a probar esto, imprimir los hrefs para asegurarse de que está realmente allí:

puts page.links.map(&:href) 

recordar que sólo porque se puede ver en el navegador, no significa que aparece en la respuesta. Podría haber sido enviado como una actualización de Ajax. También puede simplemente hacer esto que creo que es más limpio:

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

Sin embargo no creo que hacer clic en ese enlace va a hacer lo que quiere, ya que es javascript.

0

Aquí está una manera de manejarlo. Suponga que su página vuelve este contenido:

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

Sabemos que viene así que sabemos qué buscar:

link_search = %r{top.location="([^"]+)"} 
js_link = page.body.match(link_search)[1] 
page = agent.get(js_link) 
Cuestiones relacionadas