Python模拟登录实战(二)
目标:1、模拟登录豆瓣,2、自动更改签名和发表说说。
代码如下:
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 __author__ = 'ziv·chan' 4 5 6 import re 7 import time 8 import requests 9 from PIL import Image 10 11 url = 'https://www.douban.com/' 12 13 headers = { 14 'origin' : 'https://www.douban.com', 15 'referer' : 'https://www.douban.com/', 16 'user-agent' : 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36' 17 } 18 19 session = requests.session() 20 21 # 获取验证码Id 22 def get_captchaId(): 23 html = session.get(url,headers=headers) 24 html.encoding = 'utf-8' 25 pageCode = html.text 26 pattern = re.compile('captcha[?]id=(.*?)&',re.S) 27 captchaId = re.findall(pattern,pageCode)[0] 28 return captchaId 29 30 # 获取验证码图片 31 def get_captchaSolu(captchaId): 32 url_plus = 'https://www.douban.com/misc/captcha?id=%s&size=s' % captchaId 33 cha = session.get(url_plus,headers=headers) 34 with open('cap_douban.png','wb') as f: 35 f.write(cha.content) 36 f.close() 37 im = Image.open('cap_douban.png') 38 im.show() 39 im.close() 40 captcha = raw_input('请输入验证码') 41 return captcha 42 43 # 编辑签名 44 def edit_signature(ck): 45 url = 'https://www.douban.com/j/people/143780683/edit_signature' 46 data = { 47 'ck' : ck, 48 'signature' : '人间有味是清欢。' 49 } 50 headers = { 51 'origin' : 'https://www.douban.com', 52 'referer' : 'https://www.douban.com/people/143780683/', 53 'user-agent' : 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36', 54 'x-requested-with' : 'XMLHttpRequest' 55 } 56 session.post(url,data=data,headers=headers) 57 58 # 编辑说说 59 def edit_words(ck): 60 url = 'https://www.douban.com/' 61 data = { 62 'ck' : ck, 63 'comment' : '天之涯,地之角,知交半零落。一斛浊酒尽余欢,今宵别梦寒。' 64 } 65 headers = { 66 'origin': 'https://www.douban.com', 67 'referer': 'https://www.douban.com/', 68 'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36' 69 } 70 session.post(url,data=data,headers=headers) 71 72 # 获取ck 73 def get_ck(): 74 url = 'https://www.douban.com/people/143780683/' 75 html = session.get(url,headers=headers) 76 pageCode = html.text 77 # print pageCode 78 pattern = re.compile('ck=(.*?)[(">)]',re.S) 79 ck = re.findall(pattern,pageCode)[0] 80 return ck 81 82 if __name__ == '__main__': 83 captchaId = get_captchaId() 84 captcha = get_captchaSolu(captchaId) 85 form_data = { 86 'source' : 'index_nav', 87 'form_email' : '18362972928', 88 'form_password' : 'ChelseaFC.2', 89 'captcha-solution' : captcha, 90 'captcha-id' : captchaId 91 } 92 session.post('https://www.douban.com/accounts/login',data=form_data,headers=headers) 93 94 ck = get_ck() 95 edit_signature(ck) 96 # 避免冲突,设置延时 97 time.sleep(5) 98 edit_words(ck)
专注于技术,专注于生活