Ruby / Mechanize multipart Form Avec File Upload à un Mediawiki
-
26-09-2019 - |
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
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