在两个单独的页面上刮取需要登录用户名和密码的站点

我正试图从我公司的Intranet中获取信息,这样我就可以通过仪表板在我们的办公室墙板上显示信息。 我正在尝试使用以下提供的信息: 本网站 。除了作为菜鸟之外,我遇到的问题是,为了获取我想要抓取的信息,我需要登录我们的Intranet提供我的用户名在一个页面上,然后提交给另一个,以便我可以提供我的密码。 一旦我登录,我就可以链接并抓取我的数据。

以下是我的登录用户名页面中的一些源代码:

 
Username:
2) { submit(); } else { alert('Enter your Username.'); }">

以下是我的登录密码页面的一些来源:

 
 
Password:
2) { submit(); } else { alert('Enter your Password.'); }">

使用所述资源的示例这是我认为应该工作但似乎不是:

 require 'mechanize' @agent = Mechanize.new @agent.verify_mode = OpenSSL::SSL::VERIFY_NONE ##Login Page: page = @agent.get 'http://www.website_here.com/intranet/login.asp' ##Username Page: form = page.forms[0] form['USER NAME HERE'] = LoginUser ##Submit User: page = form.submit ##Password Page: form = page.forms[0] form['USER PASSWORD HERE'] = LoginPassword ##Submit Password: page = form.submit 

当我测试我的代码时,我得到以下输出:

test.rb:10:in”:未初始化的常量LoginUser(NameError)

谁能指出我做错了什么?

谢谢

编辑3/27/15:

使用@seoyoochan资源我试图像这样形成我的代码:

 require 'rubygems' require 'mechanize' login_page = agent.get "http://www.website_here.com/intranet/loginauthusr.asp?Page=" login_form = login_page.form_with(action: '/sessions') user_field = login_form.field_with(name: "session[user]") user.value = 'My User Name' login_form.submit 

当我尝试运行我的代码时,我现在得到这个输出:

test.rb:4:在': undefined local variable or method代理’for main:Object(NameError)

我需要一个关于如何分配我提供的表单将使用的正确名称/类的示例。

编辑4/4/15:

好的,现在使用@tylermauthe示例我正在尝试测试以下代码:

 require 'mechanize' require 'io/console' agent = Mechanize.new page = agent.get('http://www.website_here.com/intranet/loginauthusr.asp?Page=') form = page.forms.find{|form| form.action.include?("loginauthpwd.asp?PassedURL=")} puts "Login:" form.login = gets.chomp page = agent.submit(form) pp page 

现在我的想法是,这段代码应该允许我输入并提交我的用户名,将我带到我要求输入密码的下一页。 但是,当我尝试运行它并输入我的用户名时,我得到以下输出:

/var/lib/gems/1.9.1/gems/mechanize-2.7.3/lib/mechanize/form.rb:217:in method_missing': undefined method loginUser =’来自scraper.rb的#(NoMethodError):10:在”

我错过了什么或输错了什么? 请参阅我的第一个编辑,看看我的表单是如何编码的。 另外要明确我没有这样编码表单。 我只是想学习如何编码和抓取我的Dashing Dashboard项目所需的数据。

我刚看了一下Mechanize gem并找到了相关的解决方案。 您必须在输入字段上设置正确的“名称”。 否则,您无法接受来自它们的值。 请关注这篇文章。

http://crabonature.pl/posts/23-automation-with-mechanize-and-ruby

我能够通过以下示例登录。 感谢所有帮助我学习所有资源和示例的人!

 require 'nokogiri' require 'mechanize' agent = Mechanize.new # Below opens URL requesting username and finds first field and fills in form then submits page. login = agent.get('http://www.website_here.com') login_form = login.forms.first username_field = login_form.field_with(:name => "user_session[username]") username_field = "YOUR USERNAME HERE" page = agent.submit login_form # Below opens URL requesting password and finds first field and fills in form then submits page. login = agent.get('http://www.website_here.com') login_form = login.forms.first password_field = login_form.field_with(:name => "user_session[password]") password_field = "YOUR PASSWORD HERE" page = agent.submit login_form # Below will print page showing information confirming that you have logged in. pp page 

我从用户找到了以下示例:Senthess HERE 。 我仍然不是百分之百的所有个人代码正在做什么,所以如果有人想花时间把它分解,请这样做。 这将有助于我和其他人更好地理解。

谢谢!

不确定你是否找到了这些,但是Mechanize有相当优秀的文档: http : //docs.seattlerb.org/mechanize/GUIDE_rdoc.html

从这些开始,我在irb REPL中使用了这个简单的刮刀来登录GitHub : https : //gist.github.com/tylermauthe/781f68add24819e207c4