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

しかし、これはエラーです:

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>
4

2 に答える 2

1

Mechanize は現在、javascript をサポートしていません。サーバーがユーザーエージェントに何を送信することを期待しているかを理解し、これを Mechanize で複製することをお勧めします。Web サーバーとブラウザー間のトラフィックを監視する Firefox アドオンであるHTTPFoxなどのツールを使用できます。これがあれば、mechanize で簡単に複製できます。このようなもの;

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
于 2012-07-17T15:42:28.727 に答える
0

リンクが実際にページ上にある場合は、おそらくリンクが見つかるはずですが、より大きな問題は、'javascript:;' の href を持つリンクをクリックすることです。あなたが思っていることをしません。これは、mechanize が JavaScript インタープリターなどを備えたフル ブラウザーではないためです。

于 2012-07-16T06:54:15.330 に答える