资讯专栏INFORMATION COLUMN

python实现模拟登陆

archieyang / 3302人阅读

摘要:参考文章请点击这里模拟登陆参考文章使用的,感觉没有用起来方便。到此,所需要的都取得了,接下来就用把参数,,请求头带上,的加上查询字符串,就可以成功模拟登陆了。

这次想试一试模拟登陆,以为应该会很顺利,但是遇到了各种问题,所以记录总结一下。
参考文章:请点击这里

模拟登陆segmentfault

参考文章使用的node.js,感觉没有python用起来方便。

工具

python2.7

Chrome浏览器

requests

PyV8

lxml

思路

首先进入segmentfault的登陆页面。
可以随便输入错误密码点击登陆,使用Chrome查看请求发到了哪个url
另外看post的参数,这里有三个:remember, usernamepassword
然后可以顺便按照Requests Headers把请求头设置好(照抄到代码里)。

requests库的session对象能够帮我们跨请求保持某些参数,也会在同一个session实例发出的所有请求之间保持cookies

使用:

    # 创建一个session对象 
    session = requests.session()
    # 用session对象发出get请求
    response = session.get("https://segmentfault.com/user/login")
    # 获取cookie
    cookies = response.cookies

设置了请求头,cookie也拿到了,看看post的url

发现这段url后面是带了查询字符串的,每次发请求都会变化。
只有明白它是如何生成的才能取得我们要post的url,这里我卡了好久,去寻找答案,才找到了参考文章,这里面提供了思路获取js中生成的token。

login.min.js中查询字符串 "_=" (Chrome f12下使用快捷键Crtl+F可以打开查询窗口),因为注意到url是https://segmentfault.com/api/user/login?_=[querystring]

发现要post的url是根url加上"?_="再加上a._.
可以想到a是一个对象,_a这个对象的一个属性。
可以找到:

于是发现了a._window.SF.token

取得token

分析:回到login文件发现tokenhtml中的script标签中一个函数生成的,而html可以使用requests.get取得,然后可以通过pythonre模块用正则表达式提取出所需要的函数,这时还需要python中的PyV8模块来执行js函数。
执行:分析html的DOM节点,发现函数的位置,使用xpath取得那个script标签

    response = requests.get("https://segmentfault.com/user/login")
    sel = html.fromstring(response.text)
    s = sel.xpath("/html/body/script[8]/text()")[0]
    st = str(s.encode("utf-8"))

写一个get_token函数取得token(这里要用到PyV8模块实现pythonJavaScript的交互)
这个DOM目前是这样的:

我们需要的是第一个函数,在get_token()中用正则表达式提取出来。

def get_token(st):
    h = re.match("[sS]*(function (w) {[sS]+? })(window);", st).group()
    with PyV8.JSContext() as ctxt:
        ctxt.eval("""window={};
""" + h)
        vars = ctxt.locals
        token_var = vars.window.SF.token
        print token_var
    return token_var

到此,所需要的都取得了,接下来就用sesssion.post把参数,cookie,请求头带上,post的url加上查询字符串,就可以成功模拟登陆了。

如有错误请指正~谢谢~

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/44612.html

相关文章

  • 超详细的Python实现新浪微博模拟登陆(小白都能懂)

    摘要:可能有的老手觉得我写得很啰嗦,但其实很多新手可能都不知道这些细节,所以我把我在分析新浪微博模拟登陆的过程全写了出来。 这篇文章于去年4月发布在我的简书,现在把它放到这里,主要是为了宣传自己的分布式微博爬虫。下面是主要内容,希望能帮到有这个需求的朋友 最近由于需要一直在研究微博的爬虫,第一步便是模拟登陆,从开始摸索到走通模拟登陆这条路其实还是挺艰难的,需要一定的经验,为了让朋友们以后少...

    Aldous 评论0 收藏0
  • Python爬虫学习:微信、知乎、新浪等主流网站的模拟登陆爬取方法

    摘要:微信知乎新浪等主流网站的模拟登陆爬取方法摘要微信知乎新浪等主流网站的模拟登陆爬取方法。先说说很难爬的知乎,假如我们想爬取知乎主页的内容,就必须要先登陆才能爬,不然看不到这个界面。图片描述知乎需要手机号才能注册登陆。 微信、知乎、新浪等主流网站的模拟登陆爬取方法摘要:微信、知乎、新浪等主流网站的模拟登陆爬取方法。 网络上有形形色色的网站,不同类型的网站爬虫策略不同,难易程度也不一样。从是...

    Kahn 评论0 收藏0
  • 超详细的Python实现百度云盘模拟登陆(模拟登陆进阶)

    摘要:方法不仅适用于百度云,别的一些比较难以模拟登陆的网站都可以按照这种方式分析。本文要求读者具有模拟登陆主要是抓包和阅读代码和密码学的基本知识。和模拟登陆微博的分析流程一样,我们首先要做的是以正常人的流程完整的登录一遍百度网盘。 这是第二篇从简书搬运过来的文章(大家别误会,是我原创的)。因为前一篇文章,我看反响还挺好的,所以把这篇也搬运过来了,其实目的还是为宣传自己的分布式微博爬虫(该项目...

    CarterLi 评论0 收藏0
  • Python 爬虫之模拟登陆CSND

    摘要:它也会在同一个实例发出的所有请求之间保持,期间使用的功能。而主要是方便解析源码,从中获取请求需要的一些参数完整代码请输入账号请输入密码项目地址模拟京东登录吐槽群 Python 爬虫之模拟登陆CSND 工具 基本的脚本语言是Python,虽然不敢说是最好的语言,至少是最好的之一(0.0),用模拟登陆,我们需要用到多个模块,如下: requests BeautifulSoup requ...

    firim 评论0 收藏0
  • Python使用cookielib、urllib2和pyquery模拟登陆本科教学网并抓取数据

    摘要:原文链接使用和模拟登陆本科教学网并抓取数据刚才好无聊,突然想起来之前做一个课表的点子,于是百度了起来。使用现在,我们已经登录了本科教学网,然后结合之前的解析就可以获取网页内的课表了。 原文链接:《Python使用cookielib、urllib2和pyquery模拟登陆本科教学网并抓取数据》 刚才好无聊,突然想起来之前做一个课表的点子,于是百度了起来。 PyQuery 刚...

    tuomao 评论0 收藏0

发表评论

0条评论

archieyang

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<