Contents
twill实操图片提交
问题
sagasw <sagasw@gmail.com> 寄件者所在地時間 傳送時間 12:09 (GMT+08:00),寄件者所在地目前時間:下午2:18。 ✆ 回覆至 python-cn@googlegroups.com 收件人 python-cn@googlegroups.com 日期 2010年10月19日下午12:09 主旨 [CPyUG] 求教 twill/mechanize 的使用
想用twill或者mechanize来模拟imgur.com的提交动作,但是不成功。请教各位,看看有没有好办法。
使用http://imgur.com/?noFlash这个网址, 然后点击url, 填入一个网上图片的地址, 点击“Add”按钮, 然后点击最下面的"Continue”按钮, 这时候应该得到一个结果网址。
这个动作大家可以通过浏览器直接点击看到,但是不知道该如何用编程方式模拟。
现在问题是我可以填充"url-input"这个text,但是submit以后,结果不正确(应该得到一个上传后的网页,但是现在依然是http://imgur.com/?noFlash) 想请教大家类似这种一系列动作应该如何编写代码?
Yesheng Zou完解
Yesheng Zou <yeshengzou@gmail.com> 寄件者所在地時間 傳送時間 13:32 (GMT+08:00),寄件者所在地目前時間:下午2:16。 ✆ 回覆至 python-cn@googlegroups.com 收件人 python-cn@googlegroups.com 日期 2010年10月19日下午1:32 主旨 Re: [CPyUG] 求教 twill/mechanize 的使用
好个页面,对于url-upload的方式,好像会对表单中的数据作一些js的处理。因为在最终提交的数据中,我发现与表单的field并不是一一对应的。这种情况,可以手工构造要提交的数据,相应的field的值从获取的页面中解析得到。解析方式可以是正则,或者使用DOM(lxml这个库)。
Toggle line numbers
1 #! /usr/bin/python
2 # -*- coding: UTF-8 -*-
3
4 from mechanize import Browser
5 import re,urllib
6
7 br = Browser()
8 br.open('http://imgur.com/?noFlash')
9 data = br.response().get_data()
10
11 sid_hash = re.findall('sid_hash = "(.*?)"', data)[0]
12 p = {
13 'MAX_FILE_SIZE': re.findall('name="MAX_FILE_SIZE" value="(\d+)"', data)[0],
14 'UPLOAD_IDENTIFIER': re.findall('name="UPLOAD_ID.*?".*? value="(.*?)"', data)[0],
15 'album_title': 'Optional Album Title',
16 'submit': 'Continue',
17 sid_hash + 'file[]': '',
18 sid_hash + 'url[]': 'http://zys-free.com/other/10k.jpg',
19 }
20
21 br.open('http://imgur.com/upload', urllib.urlencode(p))
22 delete_link = re.findall('href="([^>]*?delete[^>"]*?)"', br.response().get_data())[0]
23
24 print br.geturl()
25 print delete_link
-- 进出自由才是游戏者的生存之道。
反馈
创建 by -- ZoomQuiet [2010-10-19 06:19:49]