Python mechanize 第二次打开时丢失属性
这是一个非常专业的情况,我觉得问这个问题有点尴尬;不过我现在真的不知道该怎么办了。
我需要通过一个表单跟踪一个追踪号码,并且最终到达结果页面,所以我在用Python的mechanize库。提交表单后,链接是嵌入在JavaScript里的,所以我不能直接用follow_link。我的想法是用正则表达式提取出这个网址,然后调用open()
来打开它,但当我这样做时,遇到了一些问题。
我可以正常调用br.geturl()
和br.title()
来获取目标页面的信息,但当我想读取这个页面的源代码时,就出现了错误:
AttributeError: mechanize._mechanize.Browser instance has no attribute read (perhaps you forgot to .select_form()?)
有没有什么办法可以做到这一点,还是我在搞得太复杂了?任何建议都非常感谢。
编辑 [更多代码 {真的很乱,只是想让它工作}]:
cosn="########"
baseurl="http://aaa.com/"
search="thing.do"
br=Browser()
br.open(baseurl+search)
br.select_form('traceForm')
br['consignments']=cosn
req=br.submit()
pars=Soup(req.read())
found_url=re.match(r"javascript:window.location.href = '(?P<url>[\w\d=&?\.]+)", pars.find('td', attrs={'class':'select'})['onclick']).group('url')
br.open(baseurl+found_url)
print br.title() # works
print br.geturl() # works
print br.read() # throws exception
1 个回答
7
你永远不能在浏览器实例上直接调用 first 的 .read
方法。因为浏览器本身没有这个方法。其实是 Browser.response
里有 read
方法,所以如果你想获取响应的内容,就需要这样做:
response = br.response()
response.read()
以后你可以使用 dir(obj)
来查看对象 obj
的内容,无论这个对象是浏览器还是其他什么东西。