好吧,所以这里是故事:我正在开发一个Ruby应用程序,它将从网站获取数据,并将这些数据聚合成XML文件。
我需要从中获取数据的网站没有我可以使用的任何API,因此我唯一能想到的是登录网站,按顺序加载包含我需要的数据的页面(在此case,PMs;我想归档它们),然后解析返回的HTML。
问题是,我不知道以编程方式模拟登录会话的任何方法。
是否有人有任何建议,或者知道我可以用来成功登录https页面的任何经过验证的方法,然后使用登录中的临时cookie会话以编程方式从网站加载页面?它不一定是一个只有Ruby的解决方案 - 我只想知道我是如何实现这一点的。如果它有帮助,那么该网站就是使用Microsoft的.NET Passport服务作为其登录/会话机制的网站。
欢迎任何有关此事的意见。感谢。
答案 0 :(得分:37)
Mechanize是ruby库,它模仿了Web浏览器的行为。您可以单击链接,填写表单并提交。它甚至有历史和记忆饼干。看来你的问题可以在机械化的帮助下轻松解决。
以下示例来自http://mechanize.rubyforge.org:
require 'rubygems'
require 'mechanize'
a = Mechanize.new
a.get('http://rubyforge.org/') do |page|
# Click the login link
login_page = a.click(page.link_with(:text => /Log In/))
# Submit the login form
my_page = login_page.form_with(:action => '/account/login.php') do |f|
f.form_loginname = ARGV[0]
f.form_pw = ARGV[1]
end.click_button
my_page.links.each do |link|
text = link.text.strip
next unless text.length > 0
puts text
end
end
答案 1 :(得分:0)
您可以尝试使用wget来获取页面。您可以使用此应用程序分析登录过程www.portswigger.net/proxy /.
答案 2 :(得分:0)
对于它的价值,您可以查看Webrat。它用于自动验收测试的工具,但我认为您可以使用它来模拟填写登录字段,然后按名称单击链接,并将所需的HTML作为字符串获取。没有尝试做过这样的事情,等等。