使用python mechanize上传文件

时间:2015-09-12 15:12:30

标签: python mechanize

我在Windows 10笔记本电脑上。 当我在本地计算机上手动打开submit.html时,单击并浏览到 namo.jpg namo.png然后提交,我得到网站处理我的图像并在15秒内返回结果文件。 但我似乎无法使用Python机制来做同样的事情,当它运行脚本时,mechanize_results.html文件会一直返回太快并且在页面中告诉我“上传的文件不是有效的图像。只有JPG ,PNG和GIF文件是允许的..“ 不知道我需要更改什么才能让网站将我的python机械化脚本提交的文件识别为图像文件。

我的submit.html文件有此

 <form name="myform" id="myform" action="http://deepdreamgenerator.com/upload-im" enctype="multipart/form-data" method="POST" id="upload-form">
    <input type="hidden" name="_token" value="pfC1a6HGVdbWO7mCmKVkqVinCkSYOKkQxXZV9NY1">
    <input type="file" name="file" id="upload"/>
    <input type="submit" />
</form>

我的python mechanize脚本有这个     进口机械化

filename = 'C:/Users/tintran/Desktop/namo.png'
url = "file:///C:/Users/tintran/Desktop/submit.html"
br = mechanize.Browser()
br.set_handle_robots(False) # ignore robots
br.open(url)
br.select_form('myform')
br.set_all_readonly(False)
br.form.add_file(open(filename,'r'))
res = br.submit()
content = res.read()
with open("mechanize_results.html", "w") as f:
    f.write(content)

1 个答案:

答案 0 :(得分:1)

https://docs.python.org/2/library/functions.html#open

  

如果省略mode,则默认为'r'。默认设置是使用文本模式,可以在写入时将“\ n”字符转换为特定于平台的表示,并在读取时返回。因此,在打开二进制文件时,您应该将'b'附加到模式值以在二进制模式下打开文件,这将提高可移植性。 (附加'b'即使在不以不同方式处理二进制文件和文本文件的系统上也很有用,它可以作为文档。)请参阅下面的更多可能的模式值。

这就是Windows的全部内容。所以只需使用'rb'打开PNG文件。