大家好,事隔好几个月,终于又发帖,要说原因呢,那就是最近几个月公司项目准备上线都比较忙,没时间搞..
话不多说~~来点干货~
曾经在工作中,因为公司的需要,做过一会模拟登陆和模拟发帖的小项目,目的就是达到不需要人手动点击和输入,只需要定时直接把想发的内容写上去,加上账号密码就可以进行自动发帖.
这样就可以有一个设想,可以事先建立一个账号密码的序列文件,格式可以随便采用,但是要能够自己利用代码从文件里面取一条一条的账号密码,然后就可以进行逐个发帖了,或者把再建立两个文件,储存需要发的文字和需要发的图片的本地路径,最后准备就绪,就可以开始写代码了.
1.首先分析一下网站登陆界面,看看发送了哪些请求,和需要哪些参数.
2.反复登陆几次,利用抓包软件抓取其请求,查看有什么区别,分析其潜在的验证措施.
3.构建几个基础请求,试探能否成功发送.
4.整合代码,构建请求类,进行正式整合代码,把前几个基础类整合一起,进行发送,看是否成功,不成功再看具体问题
-------------------------------------------重点------------------------------------------------.
对第三步,有几点问题:
1.希望各位小伙伴别用自己的账号,多注册几个实验实验
2.发送请求的时候最好利用代理
(因为我就在这步,封了好几次号,和IP)
3.在第三步的时候最重要的是看密码的加密是什么加密方式,这个得看具体情况具体分析了,
之前搞百度的时候,那搞得可酸爽了,找资料和实验搞了一天多,还好,最后成功了,真是感动...
4.一定一定要找对token验证秘钥,这东西,首先只能用一次,其次就是这个还有时效性,所以要费点时间
其他的参数吧,就有什么搞什么, 具体网站具体分析,就不多说了,上代码.
-------------------------------------------代码-------------------------------------------------------
拿来做实例的网站是一个比较普遍的大多数网站,比较小,所以验证不是很多,就不拿大网站介绍了,百度那个我写了一个星期左右,参数太多了,不好拿来做示例,见谅..
网站名:次元岛(一个动漫cosplay网站)
class Cos():
def __init__(self):
self.redis_cli = redis.Redis(host="127.0.0.1", port=6379, db=14)
self.base_url = "http://ciyuandao.com/handler/user/userlogin"
self.Publish = 'http://ciyuandao.com/handler/share/AddShare'
self.get_token='http://ciyuandao.com/handler/sys/GetUpToken'
self.upload_img = "http://upload.qiniu.com/"
self.shareTitle = raw_input("请输入标题:")
self.roleName = raw_input("请输入角色名:")
self.userCn = raw_input("请输入作者昵称:")
self.content = raw_input("请输入内容:")
self.img_num = raw_input("需要上传几张图:")
self.s = requests.Session()
self.formdata = {
'account': '18826515118',
'password': '916128333ab',
}
self.formPublish={
"shareType":"2",
# "imgs":"FukgS7JffiP5WKfcNEJUQiqwwSQN",
"imgType":"1",
"shareTitle":self.shareTitle,
"roleName":self.roleName,
"userCn":self.userCn,
"content":self.content,
"toWeibo":"0"
}
self.qiniuimg_data = {
# "name":"456.jpg",
"chunk":"0",
"chunks":"1",
# "token": "sg8pCj-x9YrZQJ3aAJL3oMLA-NvRAVhqboGkYjyu:OMbiFV764pfjRR5LZ1zCbuZFgXU=:eyJzY29wZSI6ImNvc3BsYXlsYSIsImRlYWRsaW5lIjoxNTQwNDU0MTA5LCJpbnNlcnRPbmx5IjowLCJkZXRlY3RNaW1lIjowLCJmc2l6ZUxpbWl0IjowLCJmc2l6ZU1pbiI6MCwiY2FsbGJhY2tGZXRjaEtleSI6MH0=",
# "key":"asdasdasdsadasdasdasdasds.jpg",
}
self.headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36'}
def home_message(self):
self.s.post(self.base_url, data=self.formdata, headers=self.headers)#登陆,获取cookie
"""
cookie = self.s.cookies.get_dict()
self.redis_cli.set("cookie_cos_la", cookie)
cookie = eval(self.redis_cli.get("cookie_cos_la"))
html = self.s.post(self.Publish,cookies = cookie,headers = self.headers).content
"""
uptoken_obj = eval(self.s.get(self.get_token,headers = self.headers).content)#获取七牛云token
uptoken = uptoken_obj["uptoken"]
self.qiniuimg_data["token"]=uptoken
imgname_list=[]
for _ in range(int(self.img_num)):
img_name = raw_input("输入上传的图片名:")
img_path = raw_input("输入上传路径:")
# self.qiniuimg_params['name'] = self.img_name+".jpg"
# files = {'file': ("1.jpg", open("./2.jpg", "rb"), "image/jpeg")}
files = {'file': (img_name+".jpg", open(img_path, "rb"), "image/jpeg")}
img_onlyname = eval(self.s.post(self.upload_img,data=self.qiniuimg_data,files=files).content)
imgname_list.append(img_onlyname["key"])
self.formPublish["imgs"]=",".join(imgname_list)
self.s.post(self.Publish,data=self.formPublish,headers = self.headers)#上传文章
def main(self):
self.home_message()
if __name__ == '__main__':
cos = Cos()
cos.main()
这个代码是我18年10-11月份的,经过我当时的实验,是可以正常发帖,和上传图片的,不知道现在还能不能用,可以拿去参考参考