1

非常に単純な質問であることはわかっていますが、1 時間立ち往生しており、これがどのように機能するのか理解できません。

学校の図書館からいくつかのものをこする必要があるので、テキスト フィールドに「CE」を挿入し、テキスト「Clasificación」のリンクをクリックする必要があります。出力は、私が仕事に使用するものです。だからここに私のコードがあります。

require 'rubygems'
require 'open-uri'
require 'nokogiri'
require 'mechanize'

url = 'http://biblio02.eld.edu.mx/janium-bin/busqueda_rapida.pl?Id=20110720161008#'
searchStr = 'CE'

agent = Mechanize.new
page = agent.get(url)

searchForm = page.form_with(:method => 'post')
searchForm['buscar'] = searchStr

clasificacionLink = page.link_with(:href => "javascript:onClick=set_index_and_submit(\'51\');").click
page = agent.submit(searchForm,clasificacionLink)

実行すると、このエラーが表示されます

janium.rb:31: undefined method `[]=' for nil:NilClass (NoMethodError)

ありがとう!

4

2 に答える 2

3

あなたの問題は実際には 31 行目ではなく 13 行目にあると思います。スクリプトに 31 行が含まれていないだけでなく、細かいマニュアルから:

form_with(criteria) 条件
に一致する単一のフォームを検索します。

そのページには、method="post". どうやら Mechanize は、ドキュメントに記載されている単一のパーツを含む基準nilに正確に一致できない場合に返されます。したがって、複数のものに一致する場合、オプションの1つを選択する代わりに返され、これを実行しようとすることになります:form_withcriteriaform_withnil

nil['buscar'] = searchStr

しかし、メソッドnilがないので、 .[]=NoMethodError

これを使用する場合:

searchForm = page.form_with(:name => 'forma')

name="forma"そのページにはフォームが 1 つだけあるため、最初の部分は省略できます。次に、これで問題が発生します。

clasificacionLink = page.link_with(:href => "javascript:onClick=set_index_and_submit(\'51\');").click
page = agent.submit(searchForm, clasificacionLink)

Mechanize は JavaScript で何をすべきかわからないため (少なくとも私の場合はわかりません)。しかし、これだけを使用する場合:

page = agent.submit(searchForm)

page表示され、スクリプトのビルドとデバッグを続行できます。

于 2011-07-21T00:00:26.870 に答える
1

ムーの答えは合理的に聞こえます。これが厳密に必要かどうかはわかりませんが、中かっこを付けてみることもできますsearchStr

searchForm['buscar'] = [searchStr]
于 2011-07-31T10:39:12.567 に答える