문제

사용하려고합니다 기계화 대학의 수업 일정 DB에서 간단한 검색을 수행합니다. 다음 코드는 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
=> []
도움이 되었습니까?

해결책

검색을 제거하십시오 form.submit.searchform.submit 제출 버튼 (IE 검색)의 가치와 관련이 있다는 생각을 제출할 수있는 검색을 부여하고 있다고 생각합니다.

코드가하는 일은 양식을 성공적으로 제출하는 것입니다. 그러나 결과 페이지 객체의 검색 메소드를 NIL 인수로 호출합니다. 검색 방법은 선택기를 기대합니다 '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"
   …

페이지 객체의 검색 방법은 Nokogiri의 검색 메소드와 같이 동작합니다. CSS 선택기 및/또는 XPath 쿼리 시퀀스를 수용하고 일치하는 요소의 열거 가능한 객체를 반환합니다. 예를 들어

page.search('h3.r a.l', '//h3/a[@class="l"]') 

다른 팁

페이지는 www :: mechanize를 통해 쿼리 될 때 무효 결과를 반환합니다.

www :: Mechanize 가이 보안 페이지에 게시 할 수 있는지 확실하지 않습니다.

"nil을 문자열로 변환 할 수 없음"은 아무것도없는 텍스트 형태로 보여줄 수 없다는 것을 의미합니다. 그것은 아무것도없는 것으로 변환 할 수 없습니다.

또한 양식과 스크립트 지연에 문제가있을 수 있습니다.

디버깅을 위해 Curl을 사용해보십시오 curl -d "occ_subject=chm" https://www.owens.edu/cgi-bin/class.pl, 내가 시도했을 때 그것은 페이지를 반환했다.

보안 페이지와 CGI 스크립트가 결합 된 문제라고 생각합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top