Использование Ruby для получения документа с веб-сайта

Я написал сценарий на 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

person thedarkknight228    schedule 29.01.2013    source источник
comment
Ваш вопрос очень расплывчатый, добавьте описание ошибки.   -  person nicooga    schedule 29.01.2013
comment
Ошибки нет. Я просто не могу найти код, как взять файл и где-нибудь сохранить. Например, мне нужно загрузить файл с веб-сайта со сценарием, а затем извлечь всю информацию из файла. Я просто не знаю, как получить файл из диалогового окна, которое появляется, когда вы делаете это вручную с веб-сайта.   -  person thedarkknight228    schedule 29.01.2013
comment
Этот вопрос / ответы предоставляют несколько способов получить страницы / документы, доступные по URL-адресу, а также некоторые библиотеки ruby ​​для функций, подобных завиткам. stackoverflow.com/questions/929652/equivalent-of-curl -for-ruby   -  person jefflunt    schedule 29.01.2013
comment
Могу ли я использовать Nokogiri для получения URL-адреса документа, а затем использовать curl для получения файла?   -  person thedarkknight228    schedule 29.01.2013
comment
Вы бы использовали Nokogiri, который уже загружен с помощью Mechanize и передан вам. Вы можете использовать Curb, OpenURI или многие другие драгоценные камни для извлечения документа. Это не файл, пока вы его не сохраните. В пути это просто данные по проводам.   -  person the Tin Man    schedule 29.01.2013


Ответы (2)


http://mechanize.rubyforge.org/Mechanize.html#method-i-get_file
Скачать файл с url-адреса довольно просто с помощью Mechanize:

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 }
person nicooga    schedule 29.01.2013

Я видел, как автоматизация терпит неудачу из-за агента браузера. Возможно, вы могли бы попробовать

browser.user_agent_alias = "Windows Mozilla"
person Gregory Ostermayr    schedule 29.01.2013