2012-07-16 119 views
2

我想在红宝石机械化隐藏的领域,并试图点击它。红宝石::如何用机械化搜索隐藏的元素

agent = Mechanize.new 
agent.get('http://www.example.com/') 
agent.page.link_with(:text => "More Links...") 

但是这给了我:

=> nil 

其实,我想一下就可以了:

agent.page.link_with(:text => "More Links...").click 

但是,这是一个错误:

undefined method `click' for nil:NilClass

这里是我的HTML代码:

<div id="rld-4" class="results_links_more highlight_d links_deep" style="display: none;"> 
<a class="large" href="javascript:;">More Links...</a> 
</div> 

回答

0

这应该可能找到的链接,如果它真的在网页上,但更大的问题是,点击一个链接的'javascript :;'没有做你认为它的事情。那是因为机械化不是一个带有JavaScript解释器的完整浏览器等。

1

Mechanize当前不支持javascript。我建议你试试图 了解服务器希望用户代理发送什么,然后用 机械化复制它。您可以使用一个工具,如HTTPFox这是一个Firefox插件,用于监视Web服务器和浏览器之间的流量。一旦你有了这个,你可以轻松地复制机械化。像这样的东西;

agent = Mechanize.new 

# Doesn't work 

# home_page = agent.get('http://requestb.in/') 
# agent.click(home_page.link_with(:text => "Create a RequestBin")) 
# => undefined method `[]' for nil:NilClass (NoMethodError) 

# Works 

# The javascript code just makes a POST request with one parameter 
request_bin = agent.post("http://requestb.in/api/v1/bins", { "private" => "false" }) 
puts request_bin.body