0

我有一个使用 mechanize 浏览器的 Python 脚本,它登录到一个自托管的 Wordpress 博客,在自动重定向到仪表板后导航到不同的页面以自动化几个内置功能。

这个脚本实际上在我的大多数博客上都 100% 有效,但其中一个进入了永久循环。

不同之处在于,唯一失败的是一个名为 Wassup 的插件正在运行。这个插件为所有访问者设置了一个会话 cookie,我认为这就是导致问题的原因。

当脚本进入新页面时,Wordpress 代码没有设置正确的 cookie,确定浏览器没有登录并重定向到登录页面。脚本再次登录并尝试相同的功能,然后我们再次进行。

我尝试使用 Twill 正确登录并正确处理 cookie,但默认情况下,Twill 将所有内容输出到命令行。这不是我想要的行为,因为此时我正在进行页面操作,我需要访问原始 html。

这是设置代码

# Browser
self.br = mechanize.Browser()

# Cookie Jar 
policy = mechanize.DefaultCookiePolicy(rfc2965=True) 
cj = mechanize.LWPCookieJar(policy=policy) 
self.br.set_cookiejar(cj)

成功登录后我调用这个函数

def open(self):
    if 'http://' in str(self.burl):
        site = str(self.burl) + '/wp-admin/plugin-install.php' 
        self.burl = self.burl[7:]
    else:
        site = "http://" + str(self.burl) + '/wp-admin/plugin-install.php' 
    try:
        r = self.br.open(site, timeout=1000)
        html = r.read()
        return html
    except HTTPError, e:
        return str(e.code)

我在想我需要将 cookie 保存到一个文件中,然后重新排序,以便 Wordpress 会话 cookie 在 Wassup 之前返回。

还有其他建议吗?

4

1 回答 1

1

事实证明,这是一个完全不同的问题,并且可以解决,这就是为什么我决定将答案放在这里,供以后阅读本文的任何人使用。

设置 WordPress 站点时,可以选择将 url 默认为http://sample.comhttp://www.sample.com。事实证明这是 cookie 存储的问题。Cookie 与 URL 一起存储,作为其名称的一部分。我的程序使用这些格式中的一种或另一种对 url 进行半硬编码。这意味着每次我发出新的 url 请求时,它的格式都错误,并且找不到具有正确名称的 cookie,因此 WordPress 网站正确地决定我没有登录并让我重新登录。

修复方法是在登录后获取重定向中传递的 url 并重新编码变量(在本例中为 self.burl)以反映 .httaccess 文件期望看到的内容。

这解决了我的问题,因为我的一些网站具有一种格式,而另一些则具有另一种格式。

我希望这可以帮助某人使用请求、斜纹、机械等。

于 2012-11-27T12:38:40.973 回答