单击Mechanize中的JavaScript链接

我有这个:

Account Summary 

我想点击该链接但是在使用link_to时出错。

我试过了:

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

我得到的错误是:NoMethodError:未定义的方法`[]’为nil:NilClass

那是一个javascript链接。 Mechanize将无法单击它,因为它不会评估javascript。 抱歉!

尝试查看单击该链接时浏览器中发生的情况。 它是否创建了POST或GET请求? 发送到服务器的参数是什么。 一旦知道,您就可以在Mechanize脚本中模拟相同的操作。 Chrome开发工具/ Firebug将有所帮助。

如果这不起作用,请尝试切换到支持javascript评估的库。 我已经使用watir-webdriver取得了巨大的成功,但你也可以尝试使用phantomjs , casperjs , pjscrape或其他工具

前两个应该有效,所以试试这个,打印出hrefs以确保它真的存在:

 puts page.links.map(&:href) 

请记住,仅仅因为您可以在浏览器中看到它并不意味着它出现在响应中。 它本可以作为ajax更新发送。 你也可以这样做我认为更干净:

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

但是我不认为点击该链接会做你想要的,因为它是javascript。

这是一种处理它的方法。 假设您的页面返回此内容:

 puts page.body   

我们知道它即将到来所以我们知道要检查什么:

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