Ruby / Mechanize Multipart Form с загрузкой файлов в Mediawiki - PullRequest
2 голосов
/ 06 августа 2010

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

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

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

Ответы [ 3 ]

1 голос
/ 07 августа 2010

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

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

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

0 голосов
/ 15 апреля 2014

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

после просмотра исходного кода я нашел решение:

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
0 голосов
/ 06 августа 2010

Похоже, вы на самом деле не устанавливаете параметр 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...