2

这是一个非常专业的案例,我觉得问它很尴尬;但是我正在努力解决这个问题。

我需要通过表单和结果页面跟踪跟踪号,所以我一直在 python 中使用机械化,表单提交后的链接嵌入在 javascript 中,所以我不能简单地 follow_link。我想要做的是正则表达式出 url,然后要求调用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
4

1 回答 1

7

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

response = br.response()
response.read()

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

于 2009-12-04T12:40:25.993 回答