2010-08-06 4 views
2

Я пытаюсь написать рубиновый скрипт с использованием механизации для пакетной загрузки большого количества изображений в MediaWiki. Скрипт работает без каких-либо ошибок, но я подозреваю, что что-то не так с тем, как я обрабатываю многочастные формы с помощью механизации. Переменная результата в конце кода не указывает на успех или неудачу, она просто показывает страницу со всеми значениями, заполненными, wpDestFile - DezzImage.png и так далее, как я указал. end.submit, кажется, ничего не делает.Ruby/Mechanize Многостраничная форма с загрузкой файла в Mediawiki

Ниже приведен полный код для загрузки одного файла. Для его работы необходимо заполнить несколько переменных.

require 'rubygems' 
require 'mechanize' 
require 'nokogiri' 

loginName = "" 
loginPassword = "" 
wikiUploadPage = "http://en.wikipedia.org/wiki/Special:Upload" 
wikiLoginPage = "http://en.wikipedia.org/wiki/Special:UserLogin" 
pathToImage = "/home/milo/image.png" 

agent = Mechanize.new {|agent| agent.user_agent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.4) Gecko/20100513 Firefox/3.6.4" } 
agent.pre_connect_hooks << lambda { |params| params[:request]['Connection'] = 'keep-alive' } 
agent.follow_meta_refresh = true 
agent.get(wikiLoginPage) do |page| 
    login_result = page.form_with(:method => /POST/) do |form| 
     form.wpName = loginName 
     form.wpPassword = loginPassword 
    end.submit 
end 

uploadPage = agent.get(wikiUploadPage) 

result = uploadPage.form_with(:method => /POST/) do |form| 
    form.file_uploads.first.file_name = pathToImage 
    form.wpDestFile = "DezzImage.png" 
    form.wpUploadDescription = "DezzImage.png" 
end.submit 

ответ

1

Мы решили эту проблему в другом месте, но проблема казалась расконфигурация в MediaWiki установки. Уточнение:

form.checkbox_with(:name => "wpIgnoreWarning").check 

с представлением формы, похоже, рассмотрел проблему.

+0

Принимая это как ответ, есть проблема с моей машиной или рубиной установкой, однако, поскольку сценарий работает на вашем компьютере, но не на моем. – frontendloader

0

Похоже, вы фактически не устанавливаете параметр POST, который отправляет страницу для загрузки. Попробуйте что-то вроде этого:

result = uploadPage.form_with(:method => /POST/) do |form| 
    form.file_uploads.first.file_name = pathToImage 
    form.wpDestFile = "DezzImage.png" 
    form.wpUploadDescription = "DezzImage.png" 
    form.wpUpload = True 
end.submit 
+0

form.wpUpload только кнопку подать в форме, если я не ошибаюсь. Эта кнопка нажата end.submit. – frontendloader

0

У меня такая же проблема.

после рассматривать исходный код, я нашел решение:

result = uploadPage.form_with(:method => /POST/) do |form| 
    form.file_uploads.first.file_name = pathToImage 
    form.wpDestFile = "DezzImage.png" 
    form.wpUploadDescription = "DezzImage.png" 
    form.checkbox_with(:name => "wpIgnoreWarning").check 
end.click_button 
Смежные вопросы