2

我一直在尝试使用 mechanize 编写一个 ruby​​ 脚本,将大量图像批量上传到 MediaWiki。该脚本运行没有任何错误,但我怀疑我使用机械化处理多部分表单的方式有问题。代码末尾的结果变量没有给出成功或失败的指示,它只是显示填充了所有值的页面,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
4

3 回答 3

1

我们在其他地方解决了这个问题,但问题似乎是 MediaWiki 安装中的错误配置。环境:

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

与表单提交似乎已经解决了这个问题。

于 2010-08-07T01:49:19.510 回答
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
于 2010-08-06T19:56:04.743 回答
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
于 2014-04-15T14:36:48.477 回答