首页 > 编程知识 正文

python怎么导出py文件,python微信自动发朋友圈

时间:2023-05-06 15:42:19 阅读:173139 作者:2693

不,严禁转载

文章目录的背景法1、不恰当的用法2、已经不能使用的用法3:Appnium法4 :模拟操作整体代码的后续工作和扩展的背景

因为课题需要把朋友圈的内容作为研究数据,所以稍微研究了一下。

现在有四种方法可以攀登。 让我们来分析一下。

法1 )不能将微信号作为朋友应用于富余的自行车。 请授权这个微信号查看自己的朋友圈。 然后,那个微信号会链接自己的朋友圈。 这和我的需求不同。 我爬朋友的朋友圈。 不是我自己的朋友圈。 第二,这条路显然是公号吸粉的路。 这个方法要扔掉。

方法2在用PC操作后,打开网页版的网站,在扫描操作的原理上不能使用了。

但是,试了一下,现在微信已经关闭了网络版,所以也不能使用这个方法。 放一点代码:

importitchatimportosimportmathfrompilimportimage #获取数据defdownload_image(: )扫描二维码登录微信,即网络版网站包含用户信息词典的列表friends=itchat.get_friends ) )的目录wechatimagesbase _ path=' wechatimages ' ifno tos .将头像存储在当前位置创建e_path获取所有朋友的头像for friend in friends: #获取头像数据img _ data=it chat.get _ head _ img (username=friends )。 )判断注释名称是否为空=' ' : img _ name=friend [ ' remark name ' ] else : img _ name=friend [ ' nickname ' ] #文件在实际操作中直接替换if img _ nameis ' * ' : img _ name=' ' #在os.path.join ()函数中输入文件名img_file=OS.path.join ) ) base _ base img_name '.jpg ' )打印(img_file ) withopen ) img_file, ' wb ' ) asfile:file.write(img_data )精灵图标def join_image ) : base _ path=' head images ' files=OS.OS=int ) math.sqrt ) float ) 6400 )/len ) files ) ),计算粘贴的各图像的边缘的长度lines=一共多少行的print(lines ) image=image ) color=0)是否定义了640*640大小的图像,未指定第三个参数缺省为黑色x=0 #横坐标定义y=0 #纵坐标定义for file _ name infiles 3360 img=image file_name ()图像img=img.resize((each_size,each_size ), Image.ANTIALIAS ) )找到并打开后,可以进行图像缩放,将可以进行image.antialiaas )图像缩放的y * each_size ()缩放后的照片放置在相应的坐标之下x )如果每行的粘贴内容足够,换行符x=0y=1image.save(jointpic.jpg ) )最后将所有照片转换为if _ name _=(_ _ main _ ' 3360 download _ id )

(法3 )虽然没有尝试APP nium,但理论上可以做的是在电脑上安装手机模拟器,输入微信,然后用工具APP nium模拟操作,读取朋友圈的数据。 但是,Appnium不是库,而是一组软件,安装需要java环境等,而且有配置,非常麻烦,所以没有用手尝试。 很好

百度,有例子。

法4:模拟操作

这个简单,但是不是完整例子,后续还要自己写,先记录一下吧。
思路很简单,就是利用PC上的微信,然后读取窗口信息,模拟手工操作,打开朋友圈窗口,然后读取显示朋友圈内容的控件,就可以看到内容。
先在电脑上打开并登录微信,没有运行就没法找到微信进程号。

import psutil# 用于获取微信电脑版的进程信息;import pywinauto# 用于自动化控制微信电脑版from pywinauto.application import Application

没装用pip install安装一下,很快。
然后在main函数里面写代码

PID = 0#用来保存微信的进程号 for proc in psutil.process_iter():#循环电脑上的进程,获取进程号和名称 try: pinfo = proc.as_dict(attrs=['pid', 'name']) except psutil.NoSuchProcess:#没有运行微信程序 pass else: if 'WeChat.exe' == pinfo['name']:#当进程名为WeChat.exe的时候,把进程号记下来 PID = pinfo['pid'] #进程ID用来提供给 PyWinAuto.application 以连接微信电脑版,connect是要已经运行微信才行 app = Application(backend='uia').connect(process=PID) #获得微信窗口实例 Win_wechat = app['微信']

接下来是关键一步,由于微信新版窗口的布局有更改,因此下一步是关键,如果不会变通,就会失败,先调用下面语句,以树形方式打印窗口上所有控件

Win_wechat.print_control_identifiers()#以树形方式打印窗口上所有控件

然后观察,【title=“朋友圈”, control_type=“Button”】这句话在哪个控件下面,目前这个版本是在【Pane6】下面,因此用下面代码获取朋友圈按钮

#获取微信窗口上朋友圈按钮实例 Button_pyq = Win_wechat['Pane6'].child_window(title="朋友圈", control_type="Button")

然后打开朋友圈窗口

#获取按钮坐标 cords = Button_pyq.rectangle() # 接着控制微信电脑版,模拟鼠标点击,把朋友圈窗口打开 pywinauto.mouse.click(button='left', coords=(cords.left + 10, cords.top + 10))

运行到这里,朋友圈窗口就打开了,接下来获取朋友圈窗口实例,然后把当前窗口内容以树形显示出来

Win_pyq = app['朋友圈']#获取朋友圈窗口实例 Win_pyq.draw_outline(colour = 'red',thickness = 2)# 在当前定位到的窗口围画出一条边界线,方便我们看出定位到了哪个控件 Win_pyq.dump_tree() 整体代码 import psutil# 用于获取微信电脑版的进程信息;import pywinauto# 用于自动化控制微信电脑版from pywinauto.application import Applicationif __name__ == '__main__': PID = 0#用来保存微信的进程号 for proc in psutil.process_iter():#循环电脑上的进程,获取进程号和名称 try: pinfo = proc.as_dict(attrs=['pid', 'name']) except psutil.NoSuchProcess:#没有运行微信程序 pass else: if 'WeChat.exe' == pinfo['name']:#当进程名为WeChat.exe的时候,把进程号记下来 PID = pinfo['pid'] #进程ID用来提供给 PyWinAuto.application 以连接微信电脑版,connect是要已经运行微信才行 app = Application(backend='uia').connect(process=PID) #获得微信窗口实例 Win_wechat = app['微信'] #win.print_control_identifiers()#以树形方式打印窗口上所有控件 #获取微信窗口上朋友圈按钮实例 Button_pyq = Win_wechat['Pane6'].child_window(title="朋友圈", control_type="Button") #获取按钮坐标 cords = Button_pyq.rectangle() # 接着控制微信电脑版,把朋友圈窗口打开 pywinauto.mouse.click(button='left', coords=(cords.left + 10, cords.top + 10)) Win_pyq = app['朋友圈']#获取朋友圈窗口实例 Win_pyq.draw_outline(colour = 'red',thickness = 2)# 在当前定位到的窗口围画出一条边界线,方便我们看出定位到了哪个控件 Win_pyq.dump_tree()#树形打印 后续工作及扩展

1.可以看到,目前只打印当前窗口的内容,后续要将窗口滑动,然后再次读取,另外还需要对数据进行处理,因为数据比较乱:

2.可以借鉴模拟鼠标点击的操作,自动操作微信进行消息的发送和回复,自动聊天机器人可以了解一下。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。