精华内容
下载资源
问答
  • 1、通过模拟浏览器的方法登录微信公众平台获取cookies 2、通过cookies登录微信公众平台获取token 3、通过搜索微信公众号文章拿到fakeid 4、通过token和fakeid进入公众号获取所有的文章 亲测可行 ...

    爬取微信公众号文章思路

     

    目前来说我知道的是三个方法:

    1、手机写按键精灵脚本
    2、Fiddler 设置代理和抓包
    3、通过 cookies 的时效性获取数据
    4、其他方法没试过、也有很多

    思路

    1、通过模拟浏览器的方法登录微信公众平台获取cookies

    2、通过cookies登录微信公众平台获取token

    3、通过搜索微信公众号文章拿到fakeid

    4、通过token和fakeid进入公众号获取所有的文章

    亲测可行
    爬取微信公众号文章思路

    爬取微信公众号文章思路

    展开全文
  • 对于爬虫来说除了抓取数据以外, 还有的就是面对各种网站的反爬机制, 有图片验证码, 滑块, 问题类等等的反爬机制, 而js逆向也是最常见的一种, 而微信公众号登录的请求也是对密码进行了一个js加密的, 对于明文的方式...

    一、前言

    对于爬虫来说除了抓取数据以外, 还有的就是面对各种网站的反爬机制, 有图片验证码, 滑块, 问题类等等的反爬机制, 而js逆向也是最常见的一种, 而微信公众号登录的请求也是对密码进行了一个js加密的, 对于明文的方式请求是绝对失败的. 所以就要模拟一下他的js加密然后把加密后的数据当作参数进行请求接口.

    二、网站代码分析

    • 通过浏览器抓包找到登录的接口, 查看传递的参数其中pwd是进行加密了的数据, 对于一些熟悉加密的朋友来说, 大概就知道了这个是md5的一个加密方法.
      在这里插入图片描述
    • 对参数pwd进行全局搜索找到相关的js加密文件
      • 通过搜索之后出来的结果就只有3个, 一个是css 一个是js 另外一个是主页的html, 所以应该就是这个js了
        在这里插入图片描述
    • 点击js之后格式化js进行全局搜索pwd关键字, 对可疑地方打断点
      在这里插入图片描述
    • 我大概对5个可疑的地方打了断点, 反正可疑的都打上, 也不亏
      在这里插入图片描述
    • 打完断点之后, 重新请求登录接口, 对代码进行分析
      • 请求登录接口之后可以看到这个地方,我们的pwd还是以明文的方式在代码里面的,所以到这里还是未进行加密的, 但是这里调用了一个目前还未知的方法名为’l’的方法, 我们需要点击右上角↓的按钮或者点击F11步入方法查看.
        在这里插入图片描述
    • 可以看到进入方法之后, 是直接返回了一个加密之后的数据, 然后把这个返回的数据和请求接口的pwd进行对比后发现是一致的, 可以确定是这里加密的了.
      在这里插入图片描述
    • 向上可以看到一大堆看不懂的类似于这样的东西就大概可以确定是md5加密了
      在这里插入图片描述
    • 把一整个代码块复制, 然后用发条js调试工具调试→没有的自己去百度下载
      • 在运行的时候发现报错, 'n’未定义
        在这里插入图片描述
    • 在最上面定义一个空的字典n, 就可以加载成功了

    在这里插入图片描述

    • 因为该函数未命名, 所以我们给他改一个名字, 然后再次加载代码, 测试运行一下是否正常返回加密后的密码
      • 因为之前看到t和n两个变量都是undefined, 所以我们不需要给他任何参数
      • 修改完之后在下面的框直接调用函数并且把密码123456传进去, 点击计算表达式
      • 修改完之后必须点击加载代码后在计算表达式
      • 可以看到计算计过是跟抓包工具里面的一模一样可以说我们的逆向已经完成了. 接下来就到python表演的时候了
        在这里插入图片描述

    三、环境安装

    • node.js
    • PyExecJS
      • pip install PyExecJs(使用anaconda的也需要这个命令, 因为conda里面没有这个库)

    四、代码部分

    • 创建一个js文件,把刚才发条js里面的代码复制进去.

    导库

    import execjs
    

    完整代码

    方法1

    # -*- coding: utf-8 -*-
    import execjs
    
    password = '123456'
    # js源文件编译
    with open('code.js', 'r', encoding='utf-8') as fp:
        ctx = execjs.compile(fp.read())
    	# 执行js函数
        pwd = ctx.call("getPwd", password)
    print(pwd)
    

    方法2

    # -*- coding: utf-8 -*-
    import execjs
    
    password = '123456'
    # 实例化node对象
    node = execjs.get()
    # js源文件编译
    with open('code.js', 'r', encoding='utf-8') as fp:
    	ctx = execjs.compile(fp.read())
    	# 执行js函数
    	func_name = 'getPwd("{}")'.format('123456')
    	pwd = ctx.eval(func_name)
    print(pwd)
    

    五、总结

    • 没啥好总结的, 里面已经很详细了
    展开全文
  • 说到微信公众号的开发,不外乎两种,一种是使用官方提供的接口开发,一种就是通过模拟登录来实现接口(这种方式有被封的风险,这里不论述) Python发展至今,已经有多种完善的服务器框架可以使用,Django,Tornado,...

    说到微信公众号的开发,不外乎两种,一种是使用官方提供的接口开发,一种就是通过模拟登录来实现接口(这种方式有被封的风险,这里不论述)

    Python发展至今,已经有多种完善的服务器框架可以使用,Django,Tornado,Flask等,可以使用这些框架打造一个服务器,在其之上实现微信公众号的功能就好。

    至于怎么申请微信公众号、设置开发模式和指定开发token的url这类问题,这里也不一一论述,毕竟这在网上一搜就能找到了。

    在我看来,微信公众号的开发在接口上说来也只有两种,一种就是验证,另一种就是回应,可以根据请求方法来区分
    @csrf_exempt
    def handleWechatRequest(request):
    	if request.method == "GET":
    		# createMenu()
    		response = HttpResponse(checkSignature(request),content_type="text/plain")
    		return response
    	elif request.method == "POST":
    		response = HttpResponse(responseMsg(request),content_type="application/xml")
    		return response
    	else:
    		response = None
    		return response
    
    第一种,验证:简单点说来,就是验证请求的内容是否正确,这一点是个大前提,也就是说这一点决定了在公众号上设置URL和token时是否能通过。关于这一点,就是关于微信公众好的验证算法了,简单点说来就是,根据设定的token值、请求的timestamp值、请求的nonce值进行排序后组成字符串,再经过哈希的sha1加密后和请求的signature相比较。如下实例:
    def checkSignature(request):
    	signature = request.GET.get("signature", None)
    	timestamp = request.GET.get("timestamp", None)
    	nonce = request.GET.get("nonce", None)
    	echostr = request.GET.get("echostr", None)
    	token = Wechat_Token
    	tmpList = [token, timestamp, nonce]
    	tmpList.sort()
    	tmpstr = "%s%s%s" % tuple(tmpList)
    	tmpstr = hashlib.sha1(tmpstr).hexdigest()
    	if tmpstr == signature:
    		return echostr
    	else:
    		return None
    

    第二种,回应:这里的功能就需要根据自己需求了,你可以实现一些自动回复的功能或是一些有趣的功能,这里无非就是对基础接口的运用,根据指定的格式来回应,来来去去也就是文本、图像、声音、事件等等单一或集合的形式,这里的接口众多(官方都有详细的介绍,什么类型的请求有什么样的字段信息,回应什么类型的信息使用什么格式等都有很详细的介绍),就不一一列举,只举个实例来形容一下(如下实例是发送位置返回经纬度和位置信息):

    def responseMsg(request):
    	rawData = smart_str(request.body)
    	xml = ET.fromstring(rawData)
    	msg = paraseMsgXml(xml)
    	MsgType = msg.get("MsgType")
    	if MsgType == "text":
    		return textMsg(msg)
    	elif MsgType == "location":
    		return locationMsg(msg)
    def paraseMsgXml(rootElem):
        msg = {}
        if rootElem.tag == "xml":
            for child in rootElem:
                msg[child.tag] = smart_str(child.text)
        return msg
    
    def locationMsg(msg):
    	ToUserName = msg.get("ToUserName")
    	FromUserName = msg.get("FromUserName")
    	j = msg.get("Location_X")
    	w = msg.get("Location_Y")
    	Label = msg.get("Label")
    
    	replyContent = "纬度:"+j+"\n经度:"+w+"\n位置信息:"+Label
            locationXML = """<xml>
    			<ToUserName><![CDATA[%s]]></ToUserName>
    			<FromUserName><![CDATA[%s]]></FromUserName>
    			<CreateTime>%s</CreateTime>
    			<MsgType><![CDATA[text]]></MsgType>
    			<Content><![CDATA[%s]]></Content>
    			</xml>""" %(FromUserName,ToUserName,str(int(time.time())),replyContent)
            return locationXML

    微信公众号开发不难,按照官方的接口来开发,更是不是什么技术点,看起来就像是格式的组装以及HTTP请求而已,真正难的是你的创意,实现什么功能,在你没什么好创意时,而又想尝试一下微信公众号的开发,我建议先使用官方的接口来尝试一下,之后可以使用一些现成的接口(例如google提供的API,百度提供的API等等)来为公众号添加一些功能,例如百度的导航,这些都是可以实现的,只要会使用这类API就可以,使用接口不难,难的都让实现接口的人做好了。
    另外,例如使用Django开发出来服务器运行在本机上是无法使用的,因为默认是无法出外网的,需要一些手段才可以,这里不作介绍。推荐使用SAE、BAE这类,可以把代码放在上面运行得到一个链接,关键有免费的额度,至于怎么使用,可以找搜一下,这不是什么秘密。

    展开全文
  • Python脚本。模拟登录知乎, 爬虫,操作excel,微信公众号
  •   最近迷上了用python写爬虫,一发不可收拾,下面我们来说一下如何实现模拟登录微信公众号平台。 ... 如何实现一键上传材料呢?本来想着激活了开发者模式什么都提供了,...那么开始开始今天操作-模拟登录公众号平台。...

      最近迷上了用python写爬虫,一发不可收拾,下面我们来说一下如何实现模拟登录微信公众号平台。
    故事起因,由于本人注册了一个公众号,想着如何通过脚本实现像部分用户发送消息呢? 如何实现一键上传材料呢?本来想着激活了开发者模式什么都提供了,结果万万没想到什么都没有。不放弃的我想着既然再公众号平台能做的事,我为啥不能通过爬虫来模拟登录,然后做一系列的操作。那么开始开始今天操作-模拟登录公众号平台。

      模拟实属不易,中间也遇到一些问题,但是不放弃的我终于将这关抗过来了,那么我们迎接今天的主角 微信公众号平台 https://mp.weixin.qq.com

    • 工具:Fiddler Google 浏览器
    • 语言:python

    不管模拟什么,都需要经过登录页在这里插入图片描述
    输入账号密码,点击登录我们通过 Fiddler 工具注意了两个比较特殊的接口:
    在这里插入图片描述

    1. 地址:https://mp.weixin.qq.com/cgi-bin/bizlogin?action=startlogin
    2. 参数:
      username= xxxxxxxxxxx 账号
      pwd=xxxxxxxxxxxxxxxxxxx 通过MD5 加密后的字符串
      imgcode= 验证码 ,后续如果登录频繁可能会触发验证码,我目前没遇到过输入验证码的情况,但是可能别人会遇到,下面我会把获取验证码的接口列出来
      f=json&userlang=zh_CN&redirect_url=&token=&lang=zh_CN&ajax=1 后面这些不是主角就不一一说了
    3. 返回值:{“base_resp”:{“err_msg”:“ok”,“ret”:0},“redirect_url”:"/cgi-bin/bizlogin?action=validate&lang=zh_CN&account=1379960679%40qq.com"}
      返回了一个重定向的地址,就是上图的第二个接口 https://mp.weixin.qq.com/cgi-bin/bizlogin?action=validate&lang=zh_CN&account=1379960679%40qq.com&token=
      通过上述输入账号密码登录后,来到了一个扫描的阶段,通过扫描二次确定增加了一定的安全性,也增加了我爬取的难度,不管什么你要扫二维码那我就把二维码下载下来,本地扫描嘛,二维码扫描这关避免不了的,如果有那位大神能越过扫描二维码这步,请收下我的膝盖,大神带带我。那么我们开始第二步

    下载二维码,本地扫描
    在这里插入图片描述
    从图中标记的两个接口很清楚的知道它们的作用:

    在这里插入图片描述
    扫描成功后,我们就跳到了管理页面,我们模拟登录的过程就结束了。通过上述接口我们获取token,后续将使用token进行一系列的操作

    • 接口: https://mp.weixin.qq.com/cgi-bin/bizlogin?action=login
    • 参数:userlang=zh_CN&redirect_url=&token=&lang=zh_CN&f=json&ajax=1
    • 返回值: {“base_resp”:{“err_msg”:“ok”,“ret”:0},“redirect_url”:"/cgi-bin/home?t=home/index&lang=zh_CN&token=1502993366"} 获取正则表达式获取token

    讲完了模拟登录的过程,接下来我们通过代码实现

    首先:我们初始化参数:

        def __init__(self):
            self.session = requests.session()
            self.headers = {
                'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.80 Safari/537.36',
                'Referer': 'https://mp.weixin.qq.com/'
            }
            self.QRImgPath = os.path.split(os.path.realpath(__file__))[0] + os.sep + 'webWeixinQr.jpg'
            self.username = "账号"
            self.password = "密码."
    

    账号密码登录

        def weixin_login(self):
            url = "https://mp.weixin.qq.com/cgi-bin/bizlogin?action=startlogin"
            params = {
                'username': self.username,
                'pwd': CommonUtil.md5(self.password),
                'imgcode': '',
                'f': 'json'
            }
            response = self.session.post(url, data=params, headers=self.headers, verify=False)
            if response.status_code == 200:
                target = response.content.decode('utf-8')
                print(target)
                self.get_weixin_login_qrcode()
    

    下载二维码

        def get_weixin_login_qrcode(self):
            url = "https://mp.weixin.qq.com/cgi-bin/loginqrcode?action=getqrcode&param=4300"
            response = self.session.get(url, headers=self.headers, verify=False)
            with open(self.QRImgPath, 'wb') as f:
                f.write(response.content)
                f.close()
            # 打开二维码
            if sys.platform.find('darwin') >= 0:
                os.subprocess.call(['open', self.QRImgPath])  # 苹果系统
            elif sys.platform.find('linux') >= 0:
                os.subprocess.call(['xdg-open', self.QRImgPath])  # linux系统
            else:
                os.startfile(self.QRImgPath)  # windows系统
            print('请使用微信扫描二维码登录')
    

    检查是否成功扫描二维码登录,通过开启一个子线程,每隔10秒去调用一次,如果状态返回成功就调用最终的登录接口

        def check_login(self):
            while True:    
                url = "https://mp.weixin.qq.com/cgi-bin/loginqrcode?action=ask&token=&lang=zh_CN&f=json&ajax=1"
                response = self.session.get(url, headers=self.headers, verify=False)
                json = jsons.loads(response.text)
                if json["status"] == 1:
                    self.login()
                    break
                time.sleep(10)
    

    最终的登录接口获取token

        def login(self):
            url = "https://mp.weixin.qq.com/cgi-bin/bizlogin?action=login"
            data = {
                'f': 'json',
                'ajax': 1,
                'random': random.random()
            }
            response = self.session.post(url, data=data, headers=self.headers, verify=False)
            # {"base_resp":{"err_msg":"ok","ret":0},"redirect_url":"/cgi-bin/home?t=home/index&lang=zh_CN&token=1502993366"}
            json = jsons.loads(response.text)
            redirect_url = json["redirect_url"]
            self.token = redirect_url[redirect_url.rfind("=") + 1:len(redirect_url)]
    

    主方法

    if __name__ == '__main__':
        wechat = WechatLogin()
        wechat.weixin_login()
        _thread.start_new_thread(wechat.check_login(), ("Thread-1", 2,))
    

    完成模拟登录,获取了token,后续就可以实现 上传素材,给用户发送消息,群发等一系列的功能,今天就写到这里,源码我已经上传到 github 有问题就 提Issues 谢谢大家的支持

    展开全文
  • 2019独角兽企业重金招聘Python工程师标准>>> ...
  • django开发接口9,python txt,csv,xml文件解析10,Scrapy框架进行Spiders简单爬虫11,抓取淘宝美女信息,下载本地并存储mysql数据库12,爬取有缘网用户信息13,模拟Github登陆14,Selenium动态模拟登录15,模拟...
  • 这段程序参考微信公众号python那些事儿”,大部分代码都是上面的。 本程序实现功能:分析个人微信好友的城市,统计男女比例。 使用环境:python 3.5 使用方法:首先用pip安装 wxpy。然后运行此程序,微信扫一扫...
  • python通过微信for pc进行消息的发送

    万次阅读 2018-05-30 09:37:57
    虽然可以使用itchat,公众号等方法变通,但是,itchat需要通过扫码登录,现在微信对第三方平台登录控制比较严,存在账号被封的风险。那么,我们怎么样通过微信电脑版来解决这个问题呢?其实很简单,这里我介绍通过...
  • Python爬虫之模拟登录微信wechat

    千次阅读 2018-03-07 21:52:17
    不知何时,微信已经成为我们不可缺少的一部分了,我们的社交圈、关注的...本篇博主将会给大家分享一下如何模拟登录网页版的微信,并展示模拟登录后获取的好友列表信息。微信模拟登录的过程比较复杂,当然不管怎么...
  • **前两天在微信公众号Python中文社区)上了解到一个很有趣的...然后我们就可以利用三行简单的代码来实现网页的微信登录 import itchat #首先得导入包。。。 itchat.auto_login() #这里可以将属性设置hotReload=...
  • 3.需进行模拟登录后才能采集的网页 4.加密的网页   3,4的解决方案和思路会在后续blog中陈述 现在只针对1,2的解决方案与思路: 一.静态网页  对于静态网页的采集解析方法很多很多!java,python都提供了很多...
  • 作者:xiaoyu微信公众号Python数据科学知乎:python数据分析师 模拟登录想必大家已经熟悉了,之前也分享过关于模拟登录wechat和京东的实战,链接如下:Python爬虫之模拟登录wechatPython爬虫之模拟登录京东商城 ...
  • Python # -*- coding: utf-8 -*- """ @Time: 2018/1/12 @Author: songhao @微信公众号: zeropython @File: index.py """ import re...
  • 作者:xiaoyu微信公众号Python数据科学知乎:Python数据分析师 不知何时,微信已经成为我们不可缺少的一部分了,我们的社交圈、关注的新闻或是公众号、还有个人信息或是隐私都被绑定在了一起。既然它这么重要,...
  • 作者:xiaoyu微信公众号Python数据科学知乎:Python数据分析师 解读爬虫中HTTP的秘密(基础篇)解读爬虫中HTTP的秘密(高阶篇) 前两篇和大家分享了爬虫中http的一些概念和使用方法,基础篇我们主要介绍了http的...
  • 目录1. 背景介绍2. 分析3. 代码实现4. 总结 从本篇博文开始,我们将一起去学习开发中经常用到的编码、消息摘要算法和加密算法方面的知识。作为开发者,掌握这些知识...微信公众平台,简称公众号。曾命名为 官号平台、
  • 模拟登录淘宝

    2019-07-30 23:06:41
    要是有用就关注微信公众号“木下学Python”可获得更多哦 # -*- coding: gb2312 -*- from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import ...
  • 作者:xiaoyu微信公众号Python数据科学知乎:python数据分析师 解读爬虫中HTTP的秘密(基础篇)解读爬虫中HTTP的秘密(高阶篇)Python爬虫之模拟登录京东商城 前两篇分享了HTTP的基本概念和高级用法,以及京东...
  • | |登录微信公众号:TeaUrn 开始使用 实现版本Java,Python,MatLab多版本实现。具体详细说明单击以下连接针对每个算法都有详细的说明。 联系方式: 微信公众号: TeaUrn或者扫描下方二维码进行关注。里面有惊喜等你...
  • python爬虫系列教程21 | 以后我再讲「模拟登录」我就是狗 python爬虫系列教程22 | 手机,这次要让你上来自己动了。这就是 Appium+Python 的牛x之处 python爬虫系列教程23 | 搞事情了,用 Appium 爬取你的微信朋友圈...
  • Python爬虫100个入门项目

    千次阅读 多人点赞 2020-02-03 17:33:55
    淘宝模拟登录 天猫商品数据爬虫 爬取淘宝我已购买的宝贝数据 每天不同时间段通过微信发消息提醒女友 爬取5K分辨率超清唯美壁纸 爬取豆瓣排行榜电影数据(含GUI界面版) 多线程+代理池爬取天天基金网、股票数据(无需...
  • 使用Selenium模拟登录淘宝网 微信自动回复机器人 运行环境 win 10 Python 3.5.4 交流 欢迎关注公众号Python绿洲 个人博客: 授权相关 虽然没有加开源协议,但是允许非商业性使用。 转载使用请注明出处,谢谢!
  • S(神)T(通)E约课系统-抢课脚本实现

    千次阅读 2019-08-28 15:16:29
    最近正在驾校学习,学生通过一个约课系统进行选课学习。...模拟登录 约车系统是在微信公众号,所以首先要找到了约课系统的链接 这一步很简单,直接打开公众号,然后选择复制链接就可以实现,最后他的链接...
  • 本文来自微信公众号Python之禅(VTalk),作者刘志军,已获作者授权,请勿二次转载! 在爬虫系列文章优雅的HTTP库requests中介绍了requests的使用方式,这一次...Python模拟知乎登录。现在假设你已经知道如何用r...
  • 微信群以及公众号 欢迎大家扫码关注公众号“食灯鬼”,一起交流。进群可通过菜单加我好友,备注量化。 若二维码因Github网络无法打开,请点击打开图片。 作者 easytrader :copyright: ,根据许可证发行。 博客 ·...

空空如也

空空如也

1 2 3
收藏数 43
精华内容 17
关键字:

python模拟微信登录公众号

python 订阅