python 模拟登陆 csdn

Filo369 2016-08-16 10:26:18
各位大神,最近用python 实现模拟 csdn 登陆,遇到了点小问题

已百度了,Google,但是发现网上的代码,多数是以前的,照着做还是不得行。

这是我自己的代码,帮看下


#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


不懂哪出问题,或者再给一份完整的代码

我自己再研究也行,谢过
...全文
388 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Filo369 2016-09-17
  • 打赏
  • 举报
回复
后面还是自己弄成功了,回来结贴。

#!/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
aassdd 2016-08-17
  • 打赏
  • 举报
回复
感觉是这个错了。应该还有参数。 <!-- 该参数可以理解成每个需要登录的用户都有一个流水号。只有有了webflow发放的有效的流水号,用户才可以说明是已经进入了webflow流程。否则,没有流水号的情况下,webflow会认为用户还没有进入webflow流程,从而会重新进入一次webflow流程,从而会重新出现登录界面。 --> <input type="hidden" name="lt" value="LT-384534-fQvshNA7tP433356re2bUberpAu6ba">

37,742

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧