【问题标题】:Using ruby to retrieve a document from a website使用 ruby​​ 从网站检索文档
【发布时间】:2013-01-13 04:43:27
【问题描述】:

我用 ruby​​ 编写了一个脚本,它可以浏览网站并进入表单页面。填写表单页面后,脚本会点击提交按钮,然后会打开一个对话框,询问您将其保存在哪里。我在尝试获取此文件时遇到问题。我已经在网上搜索并找不到任何东西。我将如何检索文档的文件名?

如果有人可以帮助我,我将不胜感激

我的代码如下:

browser = Mechanize.new

## CONSTANTS
LOGIN_URL = 'https://business.airtricity.com/ews/welcome.jsp'
HOME_PAGE_URL = 'https://business.airtricity.com/ews/welcome.jsp'
CONSUMPTION_REPORT_URL = 'https://business.airtricity.com/ews/touConsChart.jsp?custid=209495'
LOGIN = ""
PASS = ""
MPRN_GPRN_LCIS = "10000001534"
CONSUMPTION_DATE = "20/01/2013"
END_DATE = "27/01/2013"
DOWNLOAD = "DL"



### Login page
begin
    login_page = browser.get(LOGIN_URL)
rescue Mechanize::ResponseCodeError => exception
    login_page = exception.page
end

puts "+++++++++"
puts login_page.links
puts "+++++++++"

login_form = login_page.forms.first
login_form['userid'] = LOGIN
login_form['password'] = PASS
login_form['_login_form_'] = "yes"
login_form['ipAddress'] = "137.43.154.176"
login_form.submit



## home page
begin
    home_page = browser.get(HOME_PAGE_URL)
rescue Mechanize::ResponseCodeError => exception
    home_page = exception.page
end

puts "----------"
puts home_page.links
puts "----------"


# Consumption Report
begin
    Report_Page = browser.get(CONSUMPTION_REPORT_URL)
rescue Mechanize::ResponseCodeError => exception
    Report_Page = exception.page
end

puts "**********"
puts Report_Page.links
pp Report_Page
puts "**********"

Report_Form = Report_Page.forms.first
Report_Form['entity1'] = MPRN_GPRN_LCIS
Report_Form['start'] = CONSUMPTION_DATE
Report_Form['end'] = END_DATE
Report_Form['charttype'] = DOWNLOAD
Report_Form.submit

## Download Report

begin
    browser.pluggable_parser.csv = Mechanize::Download
    Download_Page = browser.get('https://business.airtricity.com/ews/touConsChart.jsp?custid=209495/meter_read_download_2013-1-20_2013-1-27.csv').save('Hello')
rescue Mechanize::ResponseCodeError => exception
    Download_Page = exception.page
end

【问题讨论】:

  • 你的问题很模糊,添加错误描述。
  • 没有错误。我只是找不到任何关于如何获取文件并将其保存在某处的代码。就像我需要使用脚本从网站下载文件,然后从文件中提取所有信息。我只是不知道如何从您从网站手动执行时弹出的对话框中检索文件
  • 这个问题/答案提供了一些方法来检索 URL 上可用的页面/文档,以及一些用于类似 curl 功能的 ruby​​ 库。 stackoverflow.com/questions/929652/equivalent-of-curl-for-ruby
  • 我会使用 Nokogiri 获取文档的 url,然后使用 curl 检索文件吗?
  • 您将使用已由 Mechanize 加载并传递给您的 Nokogiri。您可以使用 Curb、OpenURI 或许多其他 gem 来检索文档。在您保存之前,它不是文件。在传输过程中,它只是网络上的数据。

标签: ruby rubygems nokogiri mechanize mechanize-ruby


【解决方案1】:

http://mechanize.rubyforge.org/Mechanize.html#method-i-get_file
使用 mechanize 从 url 下载文件非常简单:

browser = Mechanize.new
file_url = 'https://raw.github.com/ragsagar/ragsagar.github.com/c5caa502f8dec9d5e3738feb83d86e9f7561bd5e/.html'
downloaded_file = browser.get_file file_url
File.open('new_file.txt', 'w') { |file| file.write downloaded_file }

【讨论】:

    【解决方案2】:

    我看到自动化失败是因为浏览器代理。或许你可以试试

    browser.user_agent_alias = "Windows Mozilla"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-27
      相关资源
      最近更新 更多