最近被公司的事情搞的很纠结,博客也有段时间没写了,不过最近还是忙里偷闲做了点其他事情,在这里记录下来,和大家分享一下。

需求也比较简单,老婆是做社区运营的,所以需要每天把几个帖子定时的顶上来,手工做很累,所以就想让我用程序实现。

分析一下,其实无非是先用户名和密码登录,获取到cookie后,再带着cookie去访问要顶贴的页面即可,至于剖析页面来获取url就是BeautifulSoup要做的事情了。(论坛是discuz做的,这里只为演示方法)

登录代码实现如下:def Login(user,pwd):

loginpage = urllib.urlopen('http://bbs.xxx.com/logging.php?action=login').read()

login_soup = BeautifulSoup(loginpage)

formhash_tag = login_soup.find('input',attrs={'name':'formhash'})

formhash = formhash_tag['value']

params = {

"answer":"",

"formhash":formhash,

"loginfield":"username",

"loginsubmit":"",

"password":pwd,

"questionid":"0",

"referer":"index.php",

"username":user,

}

jar = cookielib.CookieJar()

handler = urllib2.HTTPCookieProcessor(jar)

opener = urllib2.build_opener(handler)

urllib2.install_opener(opener)

user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'

headers = { 'User-Agent' : user_agent }

req = urllib2.Request(login_url)

req.add_header('User-Agent',user_agent)

enparams = urllib.urlencode(params)

page = urllib2.urlopen(req,enparams)

data = page.read()

global g_cookie

global g_formhash

g_cookie = page.info()['set-cookie']

t_cookie = re.sub(r'poK_formhash=deleted','',g_cookie)

r_formhash = re.search(r"poK_formhash=[^;]+",t_cookie)

if r_formhash:

g_formhash = re.sub(r'poK_formhash=','',r_formhash.group())

return

简单说明一下:

jar = cookielib.CookieJar()

handler = urllib2.HTTPCookieProcessor(jar)

opener = urllib2.build_opener(handler)

urllib2.install_opener(opener)

这段代码是为了能够页面返回时的cookie,并且在urllib2请求页面的时候能够自动带上cookie,而formhash是个比较诡异的东西,在登录页面设置的formhash和cookie返回的poK_formhash居然不是同一个值(后来发现,在回复页面,又是另一个值),经过测试,用cookie里的值是对的。

登录态获取到之后,剩下的就是直接去打开页面就行了,但是因为我需要去回复帖子,所以还是显得麻烦点:

def ReplyPost(url,params):

req = urllib2.Request(url)

user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'

req.add_header('User-Agent',user_agent)

enparams = urllib.urlencode(params)

page = urllib2.urlopen(req,enparams)

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

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

1.CookieJar的实例似乎没有办法获取每个key的值,也许是我愚钝,但是看了源码都不知道怎么用,大家有知道的恳请赐教。。于是用了g_cookie = page.info()['set-cookie']

这种方式,但是更诡异的事情是,当我这样获取cookie时,居然返回了两段。。所以在代码里我删掉了为空的那个

2.当配置上代理的时候CookieJar是获取不到cookie的。

由于一开始是在公司写的,而伟大的公司完美继承了gfw的意志,搞了个代理,于是用之前博客里提到的方法:

proxy = 'proxy.xxx.com:8080'

opener = urllib2.build_opener( urllib2.ProxyHandler({'http':proxy}) )

urllib2.install_opener( opener )

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

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

cookie = page.info()['set-cookie']

req = urllib2.Request("xxxxx.php")

req.add_header('Cookie',cookie)

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

python实现自动登录软件_python实现自动登录discuz论坛相关推荐

  1. python用os模块自动打开软件_Python实现自动打开电脑应用的示例代码

    由于时间原因,有时候可能会错过某个上网课的时间段.因此想要实现自动定时启动DingDing. 新手一枚,如有不当勿喷望大佬指正. 自动打开DingDing可以由两种方法实现: 通过找出找出软件在电脑中 ...

  2. python自动点赞软件_python requests 简单实现易班登录,自动点赞,评论,发表

    小编能力有限,本文纯属瞎编,如有雷同,你去打辅导员涩 一.前戏 有个操蛋,操蛋,操蛋的辅导员促使小编成长,原因:易班需要活跃度,辅导员安排班上每个人必须去易班上 写文章,写评论,发投票...  我觉得 ...

  3. python自动登录校园网_python 脚本自动登陆校园网

    学校的校园网每次重开电脑时都要重新打开浏览器进行网页登录,繁琐的操作比较麻烦,于是便写了个python的脚本进行自动登录,下面说下具体的操作过程: 1. 方法说明 博主采用的python的 reque ...

  4. python mac自动打电话软件_Python实现Mac版QQ半自动发送情话(用了这个,我追到了自己的女神)...

    来源:http://suo.im/68JhxB 前言之前追女神时候用的情话发送脚本,每次工作日上班开启电脑,就会唤醒QQ,然后发送一条情话给女神,自动唤醒QQ复制情话,不用担心遗忘,现在整理分享一下, ...

  5. python自动备份手机_python实现自动备份windows应用数据

    开发这个功能主要是刚开始要备份几台windows服务器的用户数据,后来写到最后就变成了一个数据备份通用工具了,程序可以根据配置文件的配置进行目录数据的备份,只要指定备份的目录,程序会自动调用系统win ...

  6. python手机开发的软件_Python新手入门教程_在手机上就能学习编程的软件

    Python新手入门教程_在手机上就能学习编程的软件 很多小伙伴会问:我在学编程,想利用坐地铁坐公交吃饭间隙学编程,在手机上能学编程的软件有哪些?毕竟时间宝贵啊!!哈哈哈!!! 这个问题,在悟空回答的 ...

  7. python源代码怎么变成软件_python程序怎么变成软件

    本人新学python,发现python程序转成软件好麻烦,为了方便大家,同时自己整理下资源,发布以下教程哦. 下载 "pywin32"软件,选择最新的build文件夹,支持新版本的 ...

  8. python discuz论坛帖子_Python + Selenium 入门之Discuz论坛实例

    以下是一段完整的Discuz论坛登录.发帖和回复的代码.使用Firefox的selenium IDE录制后进行整理,在IE下可正常运行.但在Firefox下进入版块时找不到[默认版块]元素.在Chro ...

  9. shell运行python脚本报错没有包_脚本安装Discuz论坛(shell + Python 实现自动化安装)...

    实验环境 1.shell 脚本:linux centos 7 系统 2.Python shell 脚本:window 系统 3.其他:python selenium 模块,谷歌浏览器, 谷歌浏览器驱动 ...

最新文章

  1. 影像组学视频学习笔记(29)-ICC的计算、Li‘s have a solution and plan.
  2. mysql 5.7.x 安装
  3. linux c 常用函数
  4. php i o优化,PHP之高性能I/O框架:Libevent(一)
  5. php xml对象解析_php解析xml 的四种简单方法(附实例)
  6. (转载)计算机科学中最重要的32个算法
  7. 车载wince系统刷界面ui_2020年值得关注的10个UI设计趋势!
  8. 学习 protobuf(一)—— ubuntu 下 protobuf 2.6.1 的安装
  9. 受检异常 非受检异常_这样设计 Java 异常更优雅,赶紧学
  10. Java压缩技术(七) TAR——Commons实现
  11. Linux——安全权限(禁止添加新用户+umask值+修改默认密码最长有效期)
  12. 单元测试Error creating bean with name org.springframework.web.servlet.resource.Resource
  13. python加颜色_python输出带颜色字体实例方法
  14. 一文读懂:云上用户如何灵活应用定制化网络服务
  15. 管理小故事 100例
  16. PhotoshopCS4的抽出滤镜下载及安装方法
  17. make px4_sitl gazebo报错:FAILED: ROMFS/romfs_extract.stamp
  18. 云服务器延迟测试,云服务器网络延迟和丢包
  19. python爬虫-国家企业_自动查企业工商登记信息(企业信用信息公示系统、极验Geetest与Python爬虫)...
  20. 论文工具大全+软件简介

热门文章

  1. 基于MATLAB的道路缺陷自动识别
  2. 记忆力游戏(C#版)
  3. schwarz( 施瓦兹)不等式证明
  4. 大神用python爬取天气信息并且语言播报
  5. 五轴在国内的现状和普及之路
  6. arguments.callee 实现函数递归调用
  7. 我宣布,这是我2022年吃的最有意思的瓜!
  8. 扩展 ZF2 Redis Zend Framework 2 Redis Extend - key正则
  9. C++ friend 用法总结
  10. 个人制作的一个uni-app上的课程表