好了,接下来是这样的:我正在开发一个Ruby应用程序,它将从网站获取数据,并将这些数据聚合到一个XML文件中。
我需要获取数据的网站没有任何可以使用的API,所以我唯一能想到的就是登录网站,按顺序加载包含我需要的数据的页面(在本例中是PM;我想将它们存档),然后解析返回的HTML。
问题是,我不知道有什么方法可以通过编程来模拟登录会话。
有没有人有什么建议,或者知道一些行之有效的方法,我可以使用这些方法成功地登录到https页面,然后使用登录时的临时cookie会话以编程方式从站点加载页面?它不一定是Ruby独有的解决方案--我只想知道如何才能真正做到这一点。如果它有帮助,这个网站就是一个使用微软的.NET Passport服务作为登录/会话机制的网站。
欢迎对此问题的任何意见。谢谢。
发布于 2009-11-14 20:01:06
机械化
Mechanize是一个ruby库,它模拟web浏览器的行为。您可以单击链接,填写表单并提交它们。它甚至有一段历史,还能记住饼干。似乎你的问题可以很容易地解决与机械化的帮助。
以下示例取自http://docs.seattlerb.org/mechanize/EXAMPLES_rdoc.html
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
发布于 2009-11-14 17:52:49
您可以尝试使用wget来获取页面。您可以使用此应用程序www.portswigger.net/proxy/分析登录过程。
发布于 2009-11-14 17:52:58
不管它有什么价值,你都可以去Webrat看看。它是用于自动化验收测试的工具,但我认为您可以使用它来模拟填写登录字段,然后按名称单击链接,并以字符串形式获取所需的HTML。我还没试过做这样的事呢。
https://stackoverflow.com/questions/1733829
复制相似问题