我有这个:
<a class="top_level_active" href="javascript:Submit('menu_home')">Account Summary</a>
我想点击该链接,但使用的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:未定义的方法`[]”的零:NilClass
这是一个JavaScript的链接。 机械化将无法点击它,因为它不评估的JavaScript。 抱歉!
试图找出在浏览器中,当你点击该链接会发生什么。 它创建一个POST或GET请求? 什么是被发送到服务器的参数。 一旦你知道,你可以模拟在机械化脚本同样的动作。 Chrome浏览器开发工具/ Firebug的帮帮忙。
如果还是不行,请尝试切换到支持JavaScript的评价库。 我用的Watir-webdriver的巨大成功,但你也可以尝试一下phantomjs , casperjs , pjscrape ,或其他工具
第2应该有工作那么试试这个,打印出的HREFs,以确保它确实存在:
puts page.links.map(&:href)
请记住,只是因为你可以在你的浏览器中看到它,它会出现在响应并不代表。 它可能已经发送的作为Ajax更新。 您也可以只做到这一点,我认为是清洁:
page.link_with(:href => /menu_home/).click
但是我不认为点击该链接会做你想做的,因为它的JavaScript。
这里有一个方法来处理它。 假设你的页面返回该内容:
puts page.body
<HTML><SCRIPT LANGUAGE="JavaScript"><!--
top.location="http://www.example.com/pages/myaccount/dashboard.aspx?";
// --></SCRIPT>
<NOSCRIPT>Javascript required.</NOSCRIPT></HTML>
我们知道它的未来,所以我们知道什么检查:
link_search = %r{top.location="([^"]+)"}
js_link = page.body.match(link_search)[1]
page = agent.get(js_link)