微信真是太弱鸡了!

虽然微信没有把表情保存到手机的功能,但是作为计算机学生肯定是有办法把表情取出来的。有网页微信的存在,加上爬虫中常用的抓包操作,很容易就可以把网页微信收到的微信保存下来。

这用爬虫很容易就能实现。

并且,即使不写爬虫,只需要懂一点骚操作,就能通过网页微信和浏览器自带的抓包功能,把微信表情保存到电脑。然后,通过电脑发送到手机。

00

低级操作

打开网页微信,点击文件传输助手。先右键检查打开开发者模式。再从手机上发几个表情到文件传输助手。

可以看到,有个src="/cgi-bin/mmwebwx-bin/webwx...",应该可以再进一步找到图片源网址。过去看一眼。

前面还有https://wx2.qq.com。跳转过去确认一下。

最后手动保存到电脑就搞定!gif也完全一样。

太简单了。。比我想象中简单多。。

01

高级操作

手动操作已经学会了,现在参照着来写出程序。

02

登陆

先导入需要的模块

from selenium import webdriverfrom selenium.webdriver.support import expected_conditions as ecfrom selenium.webdriver.support.wait import WebDriverWaitfrom selenium.webdriver.common.by import Byfrom selenium.common.exceptions import TimeoutExceptionfrom pyquery import PyQuery as PQimport timeimport requests

然后,打开浏览器,最大化,打开网页。

url = "https://wx.qq.com/"browser = webdriver.Chrome()browser.maximize_window()wait = WebDriverWait(browser, 100)browser.get(url)  # 打开网页

跳转到登陆页面,这部分就要用手机了。所以先input(),让程序先不要执行下面的语句,等输入回车再执行。用手机扫码登陆完成之后,再按下回车,继续。为了照顾一下浏览器的龟速,程序再停1秒。

input()time.sleep(1)

接下来要点击文件传输助手,转到和文件传输助手的聊天窗口。

就用来定位它。

filehelper = wait.until(    ec.presence_of_element_located((By.CSS_SELECTOR, '[]')))filehelper.

登陆部分就算完成了。

03

找表情源网址

先input(),等手机发表情过来了再处理。

继续找。

这就是收到的三条消息,再往里一层层找,把表情源网址扒出来。

sticker_url是表情源网址。ext是文件后缀,根据表情类型选择是jpg还是gif。

input()wait.until(    ec.presence_of_element_located((By.CSS_SELECTOR, '[ng-repeat="message in chatContent"]')))html = PQ(browser.page_source)chat_contents = html('[mm-repeat="message in chatContent"] [ng-repeat="message in chatContent"]').items()count = 0for chat_content in chat_contents:    temp = chat_content.find('[ng-style="message.MMImgStyle"]')    sticker_url = "https://wx2.qq.com" + temp.attr("src")    response = requests.get(sticker_url)    ext = ".jpg" if "jpg" in response.text else ".gif"    file_name = str(count) + ext    count += 1    with open(file_name, "wb") as f:        f.write(response.content)

多次测试都发现response获得的都是空内容?!多次检查我确认了代码是没问题的。有问题的是网页微信。。

04

sticker_url必须要和网页微信在同一个浏览器下才能打开!

比如,用chrome登陆网页微信。用firefox尝试打开sticker_url,就算sticker_url正确,也是得不到表情的。

或者打开一个新的chrome,也不行。必须和网页微信同一个浏览器才能l得到表情图。

手动操作,同样有这个限制。不信你就试一下。。

而requests.get(sticker_url)就相当于用其他的浏览器打开sticker_url,所以得到空内容。手动操作都做不到,程序自然也就做不到了。这么一搞,爬取难度就大大增加。

尝试了几个办法,都没有解决这个问题。最后只能认怂了。。

05

其他

我认为这个限制只是表象。最关键的原因是网页微信还有加密和识别的过程。把这个过程搞懂了还是可以爬的。既然程序干不了那就只能自己动手丰衣足食了。

06

往期瞎写

Python抢课是怎么实现的?

一次艰难的爬虫

MATLAB之结构化程序与函数

element 保存 点击链接_保存微信表情!相关推荐

  1. 【邮件邮箱】点击链接调起微信跳转到公众号、添加好友如何实现?

    大家在营销引流时希望发送邮件给用户,收到邮件后对方点击链接 调起微信 跳转到公众号.添加好友页面达到很好的转化效果:我们使用如下方法达到目的,我们先看下效果. 一.外链创建方法 1.薇搜索天天外链(公 ...

  2. 今日头条点击链接跳转微信公众号、加好友、小程序的方法(今日头条引流到微信公众号)

    有时候我们可以在今日头条发布文章或评论时可以留下链接,当用户点击链接后跳转公众号.加好友界面:我们可以使用如下方法 一.使用工具 大家可以使用如下工具创建链接. 1.天天外链官网 二.可以生成链接的页 ...

  3. python去掉json中的转义符_企业微信表情符自动转义怎么用?企业微信电脑版这样做...

      企业微信有一个独特的功能叫做"表情符自动转义",其实通俗点说就是表情的快捷键,设定了这个之后,可以在键盘上点击这个符号,而在企业微信电脑版上显示的就是对应的表情,对于快速恢复很 ...

  4. mysql 过滤emoji表情_过滤微信表情/emoji表情

    微信表情/emoji表情是个麻烦的东西,即使你能存储,也不一定能完美显示.在iOS以外的平台上,例如PC或者android.如果你需要显示emoji,就得准备一大堆emoji图片并使用第三方前端类库才 ...

  5. a href点击无效_关于微信中a链接无法跳转问题

    [问题] 微信页面开发时,各个主页之间的跳转,完全是通过a链接进行的,但是来回跳转几次,再次从其他主页面跳回首页的时候,微信头部出现了跳转加载进度条,但是就是不跳转,也没有任何反应 [范围] 只出现在 ...

  6. python模拟百度搜索点击链接_用 Python 获取百度搜索结果链接

    前言 近期有许多项目需要这个功能,由于Python实现起来比较简单就这么做了,代码贴下来觉得好点个赞吧~ 代码 # coding: utf-8 import os import time import ...

  7. html点击链接直接加微信群,微信给文字加链接代码分享(原来微信超链接是这样加的)...

    相信大家都用过好多的表白神器,所以在这里小编就不给大家展示了,今天只和大家说一个也许大家还没有用过的在微信里的小功能! 超链接 超级链接简单来讲,就是指按内容链接. 超级链接在本质上属于一个网页的一部 ...

  8. element分页点击事件_关于原生dom事件添加、删除方法的一些拓展

    引言 这是一个简单的需求,衍生的思考. 昨天QA提了一个富文本优化的需求,当插入视频和音频时,如果用户同时点击了视频.音频,那么其他的视频或者音频应该停止播放,只有最后一个点击的才会是播放状态. 需求 ...

  9. word文档保存文件时出错_保存时如何自动创建Word文档的备份副本

    word文档保存文件时出错 Backing up your documents is always a good thing to do, but not always something we re ...

最新文章

  1. Transformer-LS霸榜ImageNet,输入长度提升三倍!极度压缩参数
  2. CentOS系统快捷方式设置
  3. 暑假学习日记2013/7/21
  4. 斐波那契数列c++代码_轮到你了,斐波那契数列!
  5. image pil 图像保存_如何利用python中的PIL库做图像处理?
  6. gtest linux 性能测试,Linux下Gtest的安装与使用
  7. 大学计算机课程进制的转换教程,交大计算机课程(1):各种进制转换
  8. 在c语言中作为字符串结束标志是什么,字符串的结束标志是什么?
  9. 最新联发科Helio X30(mt6799)芯片处理器详细资料(datasheet)
  10. UIAutomatorViewer初体验
  11. 接口文档——Swagger
  12. jQuery获取(设置)自定义属性值
  13. js小技巧:根据身份证号,获取身份信息。如性别、生日、年龄
  14. RedHat终端中文乱码解决,netterm经常变换颜色的解决
  15. Verification和Validation傻傻分不清楚?
  16. 计算机视觉实验室(China)
  17. LinuxTracing System浅析和eBPF开发经验分享
  18. WEEK9 作业 B - 东东学打牌
  19. ArcGIS栅格转面失败 所转面为空 显示原栅格范围有问题
  20. 带搜索功能的GridView控件

热门文章

  1. UITablView索引列表
  2. 陕西卫视《关中男人》观后感--女人之后是男人?
  3. kube-scheduler 源码解析
  4. RabbitMQ(四) Work模式下的消息产生以及消费代码实现示例
  5. android剪切 图片,android 剪切图片
  6. go 根据输入类型执行对应的方法_Go 每日一库之 sqlc
  7. 首次结算和汇总不一致处理方式总结
  8. JVM优化系列-常用GC参数总结
  9. 10炫酷关机_Linux 中实用但很小众的 11 个炫酷终端命令
  10. 软件工程师你应该知道的100个原则