37,742
社区成员
发帖
与我相关
我的任务
分享
#coding:utf-8
from bs4 import BeautifulSoup
import urllib2
import urllib
import cookielib
import requests
import json
def toJson(str):
soup = BeautifulSoup(str,"html.parser")
tt = {}
for inp in soup.form.find_all('input'):
if inp.get('name') != None:
tt[inp.get('name')] = inp.get('value')
return tt
url = "https://passport.csdn.net/account/login?ref=toolbar"
soupstr = urllib2.urlopen(url)
soup = toJson(soupstr)
#其中参数 lt 和 execution 是动态变化的
payload = {'username': '*******',
'password': '*******',
'lt':soup['lt'],
'execution': soup['execution'],
'_eventId': 'submit'
}
header = {
'Host': 'passport.csdn.net',
'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0',
'Referer': 'https://passport.csdn.net/account/login?ref=toolbar',
'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Content-Type': 'application/x-www-form-urlencoded',
'Connection': 'keep-alive'
}
payload = json.dumps(payload)
s = requests.session()
r = s.post(url=url, data=payload, headers=header)
print r.text
#!/usr/bin/python
# -*- coding: utf-8 -*-
import cookielib
import requests
import re
# 构造 Request headers
agent = 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:38.0) Gecko/20100101 Firefox/38.0',
headers = {
'User-Agent': agent
}
# 使用登录cookie信息
session = requests.session()
session.cookies = cookielib.LWPCookieJar(filename='cookies_csdn')
try:
session.cookies.load(ignore_discard=True)
except:
print("Cookie 未能加载")
def get_lt_execution():
''' lt, execution 是一个动态变化的参数 '''
index_url = "https://passport.csdn.net/account/login?ref=toolbar"
# 获取登陆时用到的 lt
index_page = session.get(index_url, headers=headers)
html = index_page.text
pattern_lt = r'name="lt" value="(.*?)"'
pattern_execution = r'name="execution" value="(.*?)"'
parameter = {}
# 这里的 lt,execution 返回的是一个list
lt = re.findall(pattern_lt, html)
execution = re.findall(pattern_execution, html)
parameter["lt"] = lt
parameter["execution"] = execution
return parameter
# 获取验证码
def get_captcha():
pass
def isLogin():
# 通过查看用户个人信息来判断是否已经登陆
url = "http://my.csdn.net/my/mycsdn"
login_page = session.get(url, headers=headers, allow_redirects=False)
print(login_page.text)
def login(username, password):
login_url = "https://passport.csdn.net/account/login"
lt_execution = get_lt_execution()
lt = lt_execution["lt"][0]
execution = lt_execution["execution"][0]
postdata = {
"username":username,
"password":password,
"lt": lt ,
'execution': execution,
"_eventId": "submit",
}
try:
# 不需要验证码直接登陆成功
login_page = session.post(url=login_url, data=postdata, headers=headers)
if login_page.status_code == 200:
print "登陆成功"
else:
print "登陆失败"
except:
# 需要验证码登陆
postdata["captcha"] = get_captcha()
pass
session.cookies.save()
if __name__ == '__main__':
username = raw_input('输入你的账号\n> ')
password = raw_input('输入你的密码\n> ')
login(username, password)
isLogin()
开始写一些常用的登录,放在GitHub上,
https://github.com/yuzhou6/some-login
欢迎 Fork