Python机械化在第二次打开时丢失属性

dag*_*oof 2 python mechanize

这是一个非常专业的案例,我觉得很尴尬; 但是,我正在努力工作.

我需要通过表单和结果页面跟踪跟踪号码,所以我一直在python中使用mechanize,表单提交后的链接嵌入在javascript中,所以我不能简单地跟随链接.我想要做的是重新编写url然后请求调用open(),但是当我这样做时 - 我遇到了一些问题.

我可以在目标页面上调用br.geturl()并且br.title()很好,但是当需要阅读相关页面的来源时,它会抛出

AttributeError: mechanize._mechanize.Browser instance has no attribute read (perhaps you forgot to .select_form()?)
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点,或者我太过修补它,任何建议都会很棒

编辑[更多代码{真的很丑,只是试图让它工作}]:

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
Run Code Online (Sandbox Code Playgroud)

Sil*_*ost 7

您永远不会在Browser实例上进行第一次 .read方法调用.那是因为它没有这样的方法.该Browswer.responseread方法,因此,如果你想获得响应的主体你需要做的:

response = br.response()
response.read()
Run Code Online (Sandbox Code Playgroud)

对于将来,您可以使用它dir(obj)来查看对象的内容obj,无论是浏览器还是其他任何内容.

  • 非常感谢你,我知道我在做什么是错的,但我对机械化文档感到无助 (2认同)