【问题标题】:Python mechanize loses attributes on second openPython mechanize 在第二次打开时失去属性
【发布时间】:2009-12-04 11:47:21
【问题描述】:

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

我需要通过表单和结果页面跟踪跟踪号,所以我一直在 python 中使用 mechanize,表单提交后的链接嵌入在 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

【问题讨论】:

  • 你能再贴一些代码吗?

标签: python mechanize


【解决方案1】:

您永远不会首先在浏览器实例上调用.read 方法。那是因为它没有这种方法。 Browswer.responseread 方法,所以如果你想获得响应的主体,你需要这样做:

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

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

【讨论】:

  • 非常感谢,我知道我做错了,但我对机械化文档感到无助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-11
  • 1970-01-01
  • 2018-08-17
  • 2015-08-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多