Question

J'ai essayé d'écrire un script Ruby utilisant mécaniser à lot télécharger un grand nombre d'images à une MediaWiki. Les pistes de script sans erreur, mais je soupçonne qu'il ya quelque chose de mal avec la façon dont je fomulaire multipart avec mécaniser. La variable de résultat à la fin du code ne donne aucune indication de réussite ou d'échec, il montre juste la page avec toutes les valeurs remplis, wpDestFile est DezzImage.png et ainsi de suite comme je l'ai spécifié. end.submit semble ne rien faire.

Voici un code complet pour télécharger un seul fichier, quelques variables doivent remplaçaient au travail.

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
Était-ce utile?

La solution

Nous avons résolu cela ailleurs, mais le problème semblait être une mauvaise configuration dans la MediaWiki installer. Réglage:

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

avec la soumission du formulaire semble avoir abordé la question.

Autres conseils

On dirait que vous configurez pas vraiment le paramètre POST qui présente la page pour le téléchargement. Essayez quelque chose comme ceci:

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

J'ai le même problème.

après vu le code source, je trouve la solution:

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top