0

mechanizeを使用して、大学のクラススケジュールデータベースで簡単な検索を実行しようとしています。次のコードはnilを返しますが、Facebookにログインしてgoogleを検索します(diff url / paramsを使用)。私は何が間違っているのですか?

私はここで最新の(素晴らしい)railscastをフォローしています。ドキュメントの機械化は役に立ちましたが、私はまだ戸惑っています。よろしくお願いします!

ruby script/console
require 'mechanize'
agent = WWW::Mechanize.new
agent.get("https://www.owens.edu/cgi-bin/class.pl/")
agent.page.forms
form = agent.page.forms.last
form.occ_subject = "chm"
form.submit.search
=> []
4

2 に答える 2

0

このページは、WWW :: Mechanizeを介して照会されると、nullの結果を返します。

WWW::Mechanizeがこの安全なページへのPOSTを処理できるかどうかはわかりません。

「nilを文字列に変換できない」とは、何もテキスト形式で表示できないことを意味します。何もないところから何かを変換することはできません。

また、フォームとスクリプトの遅延に問題がある可能性があります。

curl -d "occ_subject=chm" https://www.owens.edu/cgi-bin/class.plページを返すことを試みたときに、curlをデバッグ、POSTなどに使用してみてください。

安全なページとcgiスクリプトを組み合わせた場合の問題だと思います。

于 2009-12-08T05:04:48.820 に答える
0

から検索を削除します。つまり、送信ボタンの値、form.submit.searchつまりform.submit検索と関係があると考えて、送信するために検索を追加していると思います。

あなたがコードしていることは、フォームを正常に送信することです。ただし、結果のページオブジェクトの検索メソッドをnil引数で呼び出しています。searchメソッドは、セレクター'body div#nav_bar ul.links li'がそのセレクターに一致する要素の配列を返すための引数として、セレクターを想定しています。もちろん、nilセレクターに一致する要素はないため、空の配列になります。

応答ごとに編集します。

あなたのコード:

ruby script/console
require 'mechanize'
agent = WWW::Mechanize.new
agent.get("https://www.owens.edu/cgi-bin/class.pl/")
agent.page.forms
form = agent.page.forms.last
form.occ_subject = "chm"
form.submit.search
=> []

私が試し、仕事に取り掛かったこと:

ルビースクリプト/コンソール

require 'mechanize'
agent = WWW::Mechanize.new
agent.get("https://www.owens.edu/cgi-bin/class.pl")
agent.page.forms
form = agent.page.forms.last
form.occ_subject = "chm"
form.submit # <- No search method.
=> Insanely long array of HTML elements

同じコードはGoogleでも機能しません:

require 'mechanize'
require 'nokogiri'
agent = WWW::Mechanize.new
agent.get("http://www.google.com")
form = agent.page.forms.last
form.q = "stackoverflow"
a = form.submit.search
b = form.submit
puts a
=> [] # <--- EMPTY!

puts b
#<WWW::Mechanize::Page
 {url
  #<URI::HTTP:0x1020ea878 URL:http://www.google.co.uk/search?hl=en&source=hp&ie=ISO-8859-1&q=stackoverflow&meta=>}
 {meta}
 {title "stackoverflow - Google Search"}
 {iframes}
 {frames}
 {links
  #<WWW::Mechanize::Page::Link
   "Images"
   "http://images.google.co.uk/images?hl=en&source=hp&q=stackoverflow&um=1&ie=UTF-8&sa=N&tab=wi">
  #<WWW::Mechanize::Page::Link
   "Videos"
   …

ページオブジェクトの検索メソッドは、CSSセレクターやXPathクエリのシーケンスを受け入れ、一致する要素の列挙可能なオブジェクトを返すという点で、Nokogiriの検索メソッドと同じように動作します。例えば

page.search('h3.r a.l', '//h3/a[@class="l"]') 
于 2009-12-08T05:29:54.560 に答える