最近被公司的事情搞的很纠结,博客也有段时间没写了,不过最近还是忙里偷闲做了点其他事情,在这里记录下来,和大家分享一下。
需求也比较简单,老婆是做社区运营的,所以需要每天把几个帖子定时的顶上来,手工做很累,所以就想让我用程序实现。
分析一下,其实无非是先用户名和密码登录,获取到cookie后,再带着cookie去访问要顶贴的页面即可,至于剖析页面来获取url就是BeautifulSoup要做的事情了。(论坛是discuz做的,这里只为演示方法)
登录代码实现如下:

简单说明一下:

这段代码是为了能够页面返回时的cookie,并且在urllib2请求页面的时候能够自动带上cookie,而formhash是个比较诡异的东西,在登录页面设置的formhash和cookie返回的poK_formhash居然不是同一个值(后来发现,在回复页面,又是另一个值),经过测试,用cookie里的值是对的。
登录态获取到之后,剩下的就是直接去打开页面就行了,但是因为我需要去回复帖子,所以还是显得麻烦点:

这样就可以了,由于对老婆公司的保密,所以代码就不放出下载了,大家了解了原理自己去写应该不难。


其实在写的过程中是遇到不少问题的,列在这里如下:

  • 1.CookieJar的实例似乎没有办法获取每个key的值,也许是我愚钝,但是看了源码都不知道怎么用,大家有知道的恳请赐教。。于是用了
  • 这种方式,但是更诡异的事情是,当我这样获取cookie时,居然返回了两段。。所以在代码里我删掉了为空的那个

  • 2.当配置上代理的时候CookieJar是获取不到cookie的。
  • 由于一开始是在公司写的,而伟大的公司完美继承了gfw的意志,搞了个代理,于是用之前博客里提到的方法:

    然后jar就一直为空,让我一度怀疑自己的智商是不是有问题,这么简单的程序都要调试半天。

  • 3.如果实在是CookieJar获取不到cookie,我们其实还是有别的办法的,那就是手动去设置http请求包头:

  • 要记得是使用登录页面返回的cookie,否则是无效的。(其实这种方法满足的另一个需求是,你可以直接在浏览器中抓包得到cookie来进行程序自动访问)

暂无相关产品

5则回应给“python实现自动登录discuz论坛”

  1. kitten说道:

    网页自动化的话,可以试试twill

    [回复]

    Mumu. 回复:

    twill已经很久没更新了呀,用起来不给力。话说博主,我也一直解决不了获取CookieJar这个实例里面的值的问题,唉,本来用httplib.HTTPConnection(Host).getresponse().getheader(“set-cookie”)可以轻松获取,无奈Host无法访问出现httplib.BadStatusLine: ”的错误,好苦恼啊。

    [回复]

  2. wvopnutmin说道:

    Shamed elation with me chengdu massage, happiness is without a hitch satisfied

    [回复]

  3. 谷月轩说道:

    在敝校论坛的 cookie 里倒是没有 poK_formhash 这个值。
    不过「发帖页面」和「主页」的 formhash 是不同的这一点提醒了我……

    [回复]

  4. login_url 是啥啊 我怎么报错

    [回复]

发表评论