我遇到了机械化下列链接的问题。这是我打算做的一个片段:机械化follow_link()和back()的问题
for link in mech.links(url_regex='/test/'):
mech.follow_link(link)
// Do some processing on that link
mech.back()
根据机械化示例,这应该工作得很好。但事实并非如此。尽管调用.back(),循环结束,即使有更多的访问链接。如果我注释掉mech.follow_link(link)和mech.back(),用print link.text替换它,它会打印出所有50个左右的链接。但是,只要我取消mech.follow_link的注释,循环会在第一个follow_link后立即终止。 back()正在工作,因为如果我打印mech.title(),然后再调用mech.back()并再次打印mech.title(),它会清楚地显示第一个标题,然后显示“后退”页面的标题。我非常困惑,而这正是它在文档中的做法。不知道发生了什么事。
您介意解释为什么有必要从第一个实例获取请求对象并将其提交给第二个实例吗?为什么我们不能'br2.open(link.url)'? – Terrence 2017-03-03 08:35:48
好吧,这已经有一段时间了,我一直没有使用机械化;从我记得,_real_需要是使用两个单独的浏览器实例,因此到链接的连接不会重置第一个实例中的链接列表。我不记得为什么我必须使用click_link,也许这只是我的编码习惯,也许它设置了我必须在jar中分享的一些cookie。如果一个简单的'open'在你的情况下工作,只要继续... – 2017-03-06 09:26:56
我看了一下'click_link'方法,我认为关键是它[添加引用标头](https:// github.com/jjlee/mechanize/blob/068fc642ae705aa0c71732db4b77d342e5b23628/mechanize/_mechanize.py#L559)with'self._add_referer_header(request)' – Terrence 2017-03-06 18:56:04