克隆mechanize.Browser产生错误

时间:2015-03-03 15:42:06

标签: python python-2.7 mechanize-python

我目前正在尝试使用mechanize.Browser对象立即发送多个请求,我的方法是启动一些线程。 每个线程都应克隆mechanize.Browser对象并发送请求。 但复制对象会导致TypeError:

    TypeError: object.__new__(cStringIO.StringO) is not safe, use cStringIO.StringO.__new__()

但我无法弄清楚如何让它运行。 打开一些页面后,我会生成线程并执行:

    newbr = copy.deepcopy(br)

导致错误。

有什么想法吗?

祝你好运, 克里斯

1 个答案:

答案 0 :(得分:1)

我遇到了类似的问题,正如this SO帖子所述。

一种解决方案是关注该链接,然后使用br.back()函数稍后返回初始状态。

如果这不起作用(它不适合我),如果你不反对使用其他库,你可以使用非常好的requests库来代替链接。在我的情况下,我想填写一个表单,并使用postget提交,我可以使用以下代码进行提交(它只需要稍作修改即可关注链接,例如,使用for links in br.links()循环

import mechanize
import requests

def testErrorCodes(br,theCodes):
    for x in theCodes:

        br.select_form(nr=0)

        theAction = br.action
        payload = {'code': x}

        response = requests.post(theAction, data=payload)
        print response.status_code

br=mechanize.Browser()
br.set_handle_robots(False)
response = br.open("http://savanttools.com/test-http-status-codes")

testErrorCodes(br,[401,402,403,404,500,503,504]) # Prints the error codes 

testErrorCodes(br,[404]) # The browser is still alive and well to be used again!