我目前正在尝试使用mechanize.Browser对象立即发送多个请求,我的方法是启动一些线程。 每个线程都应克隆mechanize.Browser对象并发送请求。 但复制对象会导致TypeError:
TypeError: object.__new__(cStringIO.StringO) is not safe, use cStringIO.StringO.__new__()
但我无法弄清楚如何让它运行。 打开一些页面后,我会生成线程并执行:
newbr = copy.deepcopy(br)
导致错误。
有什么想法吗?
祝你好运, 克里斯
答案 0 :(得分:1)
我遇到了类似的问题,正如this SO帖子所述。
一种解决方案是关注该链接,然后使用br.back()
函数稍后返回初始状态。
如果这不起作用(它不适合我),如果你不反对使用其他库,你可以使用非常好的requests
库来代替链接。在我的情况下,我想填写一个表单,并使用post
或get
提交,我可以使用以下代码进行提交(它只需要稍作修改即可关注链接,例如,使用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!