基于 selenium 的 WhatsApp web 的 Python 包装器
项目描述
好吧
<采样>受PyWhatsApp启发,使用 selenium 制作的 WhatsApp Web 的 Python 包装器
为什么好?
我正在寻找一种使用 Python 控制和自动化 WhatsApp 网络的方法,我遇到了一些非常好的库和包装器实现,包括:
所以我尝试了 pywhatkit,非常酷的一个精心制作的供其他人使用的工具,但它的实现要求你每次发送消息时都打开一个新的浏览器点击并扫描 QR 码,无论它是同一个人,这对于使用它来说是个大问题.
然后我尝试了基于yowsup的pywhatsapp,因此要求您在使用之前先向 yowsup 进行一些注册,经过一番谷歌搜索后,我害怕这样做时我的号码被屏蔽了,所以我选择了下一个选项
然后我选择了WebWhatsapp-Wrapper,它有一些很好的文档和最近的提交,所以我希望它可以工作,但它不适合我,在遇到几个错误后我放弃了它,寻找下一个替代方案。
这是shauryauppal的PyWhatsapp,它更像是 cli 工具,而不是令人惊讶的包装器,它的方法允许您动态地将 whatsapp 消息发送给未保存的联系人,而无需每次都重新扫描 QR 码。
因此,我所做的更多是对该工具的实现进行重构,使其成为更多的包装器,以轻松地允许人们在其上运行不同的脚本,而不是仅仅将其用作工具,然后我想将代码库分享给可能的人像我一样努力做到这一点。
入门
您需要做一些工作才能正常运行,但别担心,我明白了,只要您仔细阅读文档,一切都会顺利进行。
安装
我们需要在我们的机器上安装 alright 才能开始使用,这可以直接从GitHub或使用pip完成。
直接安装
您首先需要将 repo 克隆或下载到本地目录,然后如示例所示移动到项目目录,然后运行以下命令;
git clone https://github.com/Kalebu/alright
cd alright
alright > python setup.py install
....
从 pip 安装
pip install alright --upgrade
设置硒
下面是Selenium,它通过直接控制浏览器来完成所有自动化工作,因此您需要在您的机器上安装一个 selenium 驱动程序才能正常工作。但幸运的是,使用webdrive-manager会自动执行此操作。你只需要安装一个浏览器。默认情况下,好吧使用Google Chrome。
你可以做什么?
当您运行使用alright制作的程序时,一次只能有一个受控浏览器窗口,如果您在另一个窗口处于活动状态时运行它会引发错误,因此请确保在运行另一个窗口之前关闭受控窗口
未保存的联系人与已保存的联系人
如前所述,好的允许您将消息和媒体发送给两个未保存的联系人,但是您如何执行此操作有一个微小的区别,您将在使用该包时清楚地观察到这一点。
向用户发送任何内容之前的第一步是首先找到用户,然后您可以开始发送主要区别在于 btn 已保存和未保存联系人的信息。
已保存的联系人
要保存的联系人使用方法find_by_username()来定位保存的用户,您也可以使用相同的方法来定位 WhatsApp 组,参数可以是;
- 保存的用户名
- 手机号码
- 团队名字
这是一个关于如何做到这一点的示例
>>> from alright import WhatsApp
>>> messenger = WhatsApp()
>>> messenger.find_by_username('saved-name or number or group')
未保存的联系人
在向未保存的whatsapp联系人发送消息时,使用find_user()方法定位用户,参数只能是用户编号,国家代码省略(+)如下所示;
>>> from alright import WhatsApp
>>> messenger = WhatsApp()
>>> messenger.find_user('255-74848xxxx')
现在让我们深入了解如何开始发送消息和媒体
发送消息
如果您没有安装 WhatsApp 桌面版,请使用此选项
要发送消息正常,您首先需要使用find_user()方法定位特定用户(在您的号码中包含国家代码和我们的“+”符号),然后您可以开始使用send_message向目标用户发送消息()方法如下例所示;
>>> from alright import WhatsApp
>>> messenger = WhatsApp()
>>> messenger.find_user('2557xxxxxz')
>>> messages = ['Morning my love', 'I wish you a good night!']
>>> for message in messages:
messenger.send_message(message)
发送直接消息 [新]
推荐的
这是新添加的方法,可以更简单地发送直接方法,而无需执行find_user或find_by_username,即使您的机器上安装或未安装 WhatsApp 应用程序,它也能正常工作,它确实假设该号码是保存的联系人默认。
>>> messenger.send_direct_message(mobile, message, saved=True)
它确实接收以下参数;
- mobile[str] - 您要向其发送消息的用户的手机号码
- message[str] - 你要发送的消息
- saved[bool] - 如果你想发送给保存的联系人,默认为 False
这是有关如何使用它的示例;
>>> from alright import WhatsApp
>>> messenger = WhatsApp()
>>> >>> messenger.send_direct_message('25573652xxx', 'Hello')
2022-08-14 17:27:57,264 - root -- [INFO] >> Message sent successfuly to
2022-08-14 17:27:57,264 - root -- [INFO] >> send_message() finished running!
>>> messenger.send_direct_message('25573652xxx', 'Who is This ?', False)
2022-08-14 17:28:30,953 - root -- [INFO] >> Message sent successfuly to 255736524388
2022-08-14 17:28:30,953 - root -- [INFO] >> send_message() finished running!
如果您安装了桌面 WhatsApp 应用程序,则此调用将导致问题,请使用 SendMessage 1
发送消息1
此发送消息不会像上面的发送消息那样首先找到用户,即使您安装了桌面 WhatsApp 应用程序,它也可以工作,在您的号码中包含带有“+”符号的国家代码,如下例所示;
>>> from alright import WhatsApp
>>> messenger = WhatsApp()
>>> messages = ['Morning my love', 'I wish you a good night!']
>>> mobNum = 27792346512
>>> for message in messages:
messenger.send_message1(mobNum, msg)
多个号码
这里如何向多个用户发送消息,假设我们希望向所有联系人发送 merry-x mass,我们的代码将如下所示;
>>> from alright import WhatsApp
>>> messenger = WhatsApp()
>>> numbers = ['2557xxxxxx', '2557xxxxxx', '....']
>>> for number in numbers:
messenger.find_user(number)
messenger.send_message("I wish you a Merry X-mass and Happy new year ")
您必须在您的号码中包含国家代码才能使该库正常工作,但不要包含 (+) 符号
发送图像
发送图像并不是什么新鲜事,它只是你必须包含图像的路径和伴随图像的消息而不仅仅是原始字符串字符,而且你还使用了 send_image(),这里是一个例子;
>>> from alright import WhatsApp
>>> messenger = WhatsApp()
>>> messenger.find_user('mobile')
>>> messenger.send_picture('path-to-image',"Text to accompany image")
发送视频
同样的视频只是send_videos() 方法;
>>> from alright import WhatsApp
>>> messenger = WhatsApp()
>>> messenger.find_user('mobile')
>>> messenger.send_video('path-to-video)
发送文件
其余的文档,如 docx、pdf、音频等属于文档类别。您可以使用send_files()来做到这一点。
>>> from alright import WhatsApp
>>> messenger = WhatsApp()
>>> messenger.find_user('mobile')
>>> messenger.send_file('path-to-file')
检查聊天是否有未读消息
此方法检查名称作为查询参数传递的聊天是否有未读消息。
>>> from alright import WhatsApp
>>> messenger = WhatsApp()
>>> messenger.check_if_given_chat_has_unread_messages(query="Chat 123")
获得第一次聊天
此方法获取 web 应用程序左侧列表中的第一个聊天 - 因为它们没有以预期的方式排序,所以应用了一个公平的解决方法。也可以通过传递参数ignore_pinned来忽略或不固定聊天(位于列表顶部)- 默认值为ignore_pinned=True.
>>> from alright import WhatsApp
>>> messenger = WhatsApp()
>>> messenger.get_first_chat()
按名称搜索聊天
此方法通过作为query参数提供的部分名称搜索打开的聊天,返回第一个匹配项。区分大小写被处理并且不影响搜索。
>>> from alright import WhatsApp
>>> messenger = WhatsApp()
>>> messenger.search_chat_by_name(query="Friend")
获取给定聊天中收到的最后一条消息
此方法搜索在给定聊天中收到的最后一条消息,作为query参数接收,返回发件人、文本和时间。处理群组、号码和联系人案例,以及可能未收到的消息、视频/图像/贴纸等。
>>> from alright import WhatsApp
>>> messenger = WhatsApp()
>>> messenger.get_last_message_received(query="Friend")
检索所有未读消息的聊天名称
此方法搜索所有未读消息的聊天,可能接收参数以limit搜索top或不搜索多个聊天,返回聊天名称列表。
>>> from alright import WhatsApp
>>> messenger = WhatsApp()
>>> messenger.fetch_all_unread_chats(limit=True, top=30)
免责声明:显然,fetch_all_unread_chats功能适用于大多数更新的浏览器版本(例如,Chrome Version 102.0.5005.115 (Official Build) (x86_64))。如果您失败了,请考虑在我们为未更新的浏览器寻找替代方案时更新您的浏览器。
从whatsapp注销
您可以退出当前保存的帐户
>>> from alright import WhatsApp
>>> messenger = WhatsApp()
>>> messenger.logout()
出色地!这就是现在从软件包中获取的所有内容,以请求新功能提出问题。
贡献
alright是一个在MIT许可下的开源包,因此无论是代码、文档还是拼写错误,都欢迎贡献。
在为代码贡献代码时,请在进行更改之前为此提出问题,以便我们可以在实施之前进行讨论。
问题
如果您在使用该软件包时遇到任何问题或困难,只需提出一个,以便我们尽快修复它。
给它一颗星
这对你有用吗?然后给它一个星,以便更多的人可以使用它。
学分
所有学分:
- 卡莱布
- 欧里科·尼卡西奥
- 维克多·丹尼尔
- 科尼利厄斯·莫斯特
- 肖里亚乌帕尔
- 和所有的贡献者