如何用Python实现微信自动签到功能

Python013

如何用Python实现微信自动签到功能,第1张

一般来说分三种:

* 给公众号发送特定文字

* 普通的网页点击

* 授权的网页点击

我这里给出前两种的解决方案。

普通的网页点击:

1. 建议通过浏览器或者Wireshark分析消息的交互。

2. 之后通过requests模拟。

由于没有具体的网址,我没有办法给出具体的代码。

给公众号发送特定的问题:

1. 建议使用Python的微信API(pip install itchat)

2. 由于没有提供Python版本,我这里给出兼容的解决方案

#coding=utf8

import threading

import itchat

SIGN_IN_MP_DICT = {

u'学校微信公众号': u'学校签到口令',

u'公司微信公众号': u'公司签到口令', }

def get_day(timeGap):

return int(time.strftime('%y%m%d', time.localtime(time.time() + timeGap)))

NEXT_SIGN_DATE = get_day(60*60*24)

def sign_in_thread():

''' 签到线程

如果尚未到需要签到的日期,则继续循环

如果到了需要签到的日期,则完成两个公众号的签到,并更新日期

'''

while 1:

if get_day <NEXT_SIGN_DATE:

time.sleep(30)

else:

for k, v in SIGN_IN_MP_DICT.items():

itchat.send(msg=v,

toUserName=itchat.search_mps(name=k)[0]['UserName'])

NEXT_SIGN_DATE = get_day(60*60*24)

itchat.auto_login(True)

# 测试是否存在特定公众号

for mpName in SIGN_IN_MP_DICT.keys():

mpList = itchat.search_mps(name=mpName)

if len(mpList) != 1:

print(u'没有检测到公众号“%s”,请检查名称')

break

else:

signInThread = threading.Thread(target=sign_in_thread)

signInThread.setDaemon(True)

signInThread.start()

itchat.run()

最近想买个行车记录仪,经常在在什么值得买上搜索信息,感觉浪费的时间比较多,就想用Python写个自动搜索的功能。另外,什么值得买已经很久没有签到了,刚开始玩的时候台天天签到,乐此不疲。现在已经很久没有签到了,既然我是码农,当然得实现自动化哈。

1.实现自动登录;

2.实现自动签到;

3.实现搜索功能;

requests库应该就能实现这些功能,但是需要解析页面,我这些需求简单,没有性能要求,因此采用简单的selenium库模拟浏览器操作实现这个需求。

selenium、BeautifulSoup

关于selenium的使用在 Python爬取煎蛋妹子图 里有介绍。

遇到的坑:

1.点击登录按钮后,弹出登录框,后续无法找到用户名、密码的element。

开始以为是点击登录后,马上就去获取这个element,此时登录框还没有弹出来,因此延迟了3秒(这个问题在模拟登录百度时碰到过)。依旧不能解决。问题原因就是没有获取到当前登录框的handle,因此获取所有的window_handle,然后切换到当前的,debug发现是始终只有一个handle。

其实什么值得买的登录框是一个frame,需要采用switch_to.frame方法定位到当前frame。

搜索只处理了搜索结果的第一页,如果需要更多的数据,处理分页即可。

以上三个方法即实现了三个功能需求,但是我想要每天自动实现登录、签到功能,同时搜索‘行车记录仪’处理结果能够发送到手机。实现搜索结果发送到手机,自然想到了 itchat 这个库。另外使用 apscheduler 实现了定时任务。

下面开始列遇到的坑:

1.签到时

写的时候没注意,捕获异常写了EOFrror,导致签到过后,后续不会发送微信消息。EOFrror是意味着它发现了一个不期望的文件尾时会抛出的异常,因此这里不会捕获到。

修改成: