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

-- 进出自由才是游戏者的生存之道。

http://zys-free.com


反馈

创建 by -- ZoomQuiet [2010-10-19 06:19:49]

MiscItems/2010-10-19 (last edited 2010-10-19 06:19:51 by ZoomQuiet)