mybatis-plus 会自动增加 order by_python自动撸支付宝基金答题红包

08ab68816003a1d7ecdd9047c2687462.png

python自动撸支付宝基金答题红包

背景

在一个套利撸羊毛群里,一群小伙伴每天在不懈地撸支付宝的基金红包,于是自己也加入了撸红包大军。

于是就重复地在不同的基金里面,看有没有答题红包,有的话就点进去,回答一个及其容易的题目,当然,答错了也会提示你让你选择另外一个答案的。

99aefb1782d4f972164d89f4323c0998.png

领完红包,还要看看这个红包能否买货币基金或者短期理财,或者退而求其次,能买债券基金也行的,前提得要它的红包金额能否覆盖手续费,而且波动不能太大。

于是玩了几次后,觉得动作重复,且枯燥无味,为啥那些小伙伴能否如此每天乐此不疲地刷呀刷呀。

看着这小羊毛,每天撸就有点费时费神了, 于是就祭出万能胶水器python,可以通过自动化解放自己的双手。

最终效果视频演示

知乎视频​www.zhihu.com

python appium自动化获取支付宝答题红包 (一) 获取所有财富号的红包

知乎视频​www.zhihu.com

python appium自动化获取支付宝答题红包 (二) 删除不能购买债基的红包

第一个视频进去每一个 财富号里面,找到有红包的,然后自动答题,领取红包。

第二个视频是对获取的所有红包进行过滤,把不能领取货币/债券基金的红包给删除,因为我们的目标是撸羊毛,不要7天后被套了,套成了长期好基友。 纪律性是第一原则,切记。 因为现在的基金(除了货基)一般7天内卖出会有高额的1.5%的手续费,一般就等到7天后卖出。

实现技术路径

有人看过我前面几个教程,说为啥不用autojs呢?

3f858f956fed1064a14e4dd771265e0f.png

745161b74bf6ea66033828fa3a4f37b1.png

哎,个人觉得人生苦短,还是用python吧(python之禅)。其实主要考虑autojs用起来感觉像是一个玩具,控件查找不稳定,运行也不稳定,而且在手机上运行,一些业务逻辑写起来也复杂,缺乏中间件,调用起来挺麻烦的。比如想加个redis去重队列,或者加个验证码深度学习识别模型,写起来都挺复杂的,最终的实现也都是在电脑上用python写个接口,然后autojs通过网络传输调用我起的python服务。

那什么是appium呢? 直接百度第一条的答案。

27a1922bd2476619a39a2bbeb468c9fa.png
appium 是一个自动化测试开源工具,支持 iOS 平台和 Android 平台上的原生应用,web应用和混合应用。
  • “移动原生应用”是指那些用iOS或者 Android SDK 写的应用(Application简称app)。
  • “移动web应用”是指使用移动浏览器访问的应用(appium支持iOS上的Safari和Android上的 Chrome)。
  • “混合应用”是指原生代码封装网页视图——原生代码和 web 内容交互。比如,像 Phonegap,可以帮助开发者使用网页技术开发应用,然后用原生代码封装,这些就是混合应用。

重要的是,appium是一个跨平台的工具:它允许测试人员在不同的平台(iOS,Android)使用同一套API来写自动化测试脚本,这样大大增加了iOS和Android测试套件间代码的复用性。

本次使用的是python+appium框架进行操作手机,而appium的部署也是挺麻烦的,不过有个门槛也好,不然羊毛都被撸光了。

  1# coding=utf-82# 公众号:可转债量化分析34# core code56class Alipay(DriveBase):7    def __init__(self, deviceName, package, activity, resetKB=False):8        super(Alipay, self).__init__(deviceName, package, activity, resetKB)9        self.history_file = os.path.join(self.root_path(), 'redbag.txt')10        self.width, self.height = self.get_screen_size()1112    def fund_redbag(self, clear):13        '''14        答题红包15        '''16        if clear:17            self.clear_file(self.history_file)1819        self.history_result = self.read_histroy(self.history_file)20        self.click_by_text('理财')21        time.sleep(1)2223        search_points = [819 * self.width / 1080, 84 * self.height / 2207], [963 * self.width / 1080,24                                                                                  228 * self.height / 2207]25        self.click(search_points)2627        # 输入28        input_btn = WebDriverWait(self.driver, 4).until(EC.presence_of_element_located(29            (By.XPATH, '//android.widget.EditText[@text="搜索"]')))30        input_btn.send_keys(u'财富号')31        time.sleep(1)3233        self.click_by_text('搜索')34        time.sleep(1)3536        # 向右滑动到最后37        self.move_right_to_end()38        self.click_by_text('查看更多')3940        while True:41            # 出现一个列表42            item_list = self.driver.find_elements_by_xpath(43                '//android.widget.TextView[contains(@text, "财富号")]')4445            for item in item_list[1:]:46                text = item.text4748                if text in self.history_result:49                    continue5051                if re.search('信用卡财富号|储蓄卡财富号', text):52                    self.history_result.append(text)53                    self.save_hitory(self.history_file, self.history_result)54                    # self.driver.back()55                    continue5657                try:58                    item.click()59                    time.sleep(3)60                except Exception as e:61                    pass62                else:63                    # 基金详情页面64                    try:65                        self.swipe_scroll_horizion()66                        has_redbag = self.driver.find_element_by_xpath(67                            '//android.view.View[@text="答题领取"]')6869                    except Exception as e:70                        print(f'{text} ==>没有红包')71                        self.history_result.append(text)72                        self.save_hitory(73                            self.history_file, self.history_result)74                        time.sleep(1)75                    else:76                        self.going_redbag_page(text, has_redbag)77                        time.sleep(1)7879                    self.driver.back()80                    print('点击返回')8182                time.sleep(1)8384            # 向下滑动85            self.scroll_down_next_page_fund_list()868788    @delay89    def click_by_text(self, text):90        broadcast_btn = WebDriverWait(self.driver, 3).until(91            EC.presence_of_element_located((By.XPATH, f'//android.widget.TextView[@text="{text}"]')))92        broadcast_btn.click()939495    @delay96    def swipe_scroll_vertical(self):97        self.driver.swipe(500, 2000, 500, 400, 4000)9899    def find_bond_redbag(self):
100        '''
101        寻找债基
102        '''
103        self.click_by_text('卡包')
104
105        result = set()
106        while True:
107
108            redbags = self.driver.find_elements_by_xpath('//android.widget.TextView[@text="去使用"]')
109            fund_num = len(redbags)
110            time.sleep(1)
111            for redbag_num in range(fund_num):
112                self.driver.find_elements_by_xpath('//android.widget.TextView[@text="去使用"]')[redbag_num].click()
113                time.sleep(2)
114                try:
115                    name = self.driver.find_element_by_xpath('//android.widget.TextView[contains(@text, "财富号")]')
116                except Exception as e:
117                    time.sleep(1)
118                    self.driver.back()
119                    time.sleep(1)
120                    # print('return back')
121                    continue
122
123                try:
124                    is_bond = self.driver.find_element_by_xpath('//android.widget.TextView[contains(@text, "债") or contains(@text, "理财") or contains(@text, "货币")]')
125                except Exception as e:
126                    # self.driver.find_element_by_xpath('//')
127                    delete_img = [972, 84], [1044, 228]
128                    self.click(delete_img)
129                    delete_name = self.driver.find_element_by_xpath('//android.widget.TextView[@text="删除"]')
130                    delete_name.click()
131                    time.sleep(2)
132                    delete_btn = self.driver.find_element_by_xpath('//android.widget.Button[@text="确定"]')
133                    delete_btn.click()
134                    time.sleep(2)
135
136                else:
137                    print(f'{name.text}   可用标的债/货币:  n{is_bond.text}n')
138                    result.add(name.text)
139                    self.driver.back()
140                    time.sleep(1)
141
142            self.swipe_scroll_vertical()
143            self.save_hitory('used_bond.txt',list(result))
144
145
146def alipy_fund_redbag(clear=False,resetKB=False):
147    package = 'com.eg.android.AlipayGphone'
148    activity = 'com.eg.android.AlipayGphone.AlipayLogin'
149
150    app = Alipay(deviceName, package, activity,resetKB)
151    app.fund_redbag(clear)
152    # app.find_bond_redbag()
153
154def main(clear=False,resetKB=True):
155    alipy_fund_redbag(clear=clear,resetKB=resetKB)
156
157if __name__ == '__main__':
158    fire.Fire(main)

核心代码如上。

没什么高深的玩意,就按照手工怎么点击就怎么写,更多的是语法的使用与控件查找,异常处理的逻辑控制。

我把封装的基类抽离出去了,所以实际代码要比上面的多得多,以为篇幅原因就不把所有代码贴出来,而且我发现关注我的读者,一般也不怎么关心我的代码,大部分都是伸手党,即使我贴出来的代码里面出几个bug也没人发现哈。

友情提示:因为最近信用债危机,所以最近撸债有风险。

来看看这只凶险的广发债就知道啦

3c69c937b7e0724841d1a78d3dcdc771.png

745161b74bf6ea66033828fa3a4f37b1.png

完整代码可以在公众号后台 留言: 支付宝红包python

就可以获取啦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/297098.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# WPF文本框TextEdit不以科学计数法显示

01—前言一个float或者double类型的数值,如果小数点后0的个数≥4,在界面上就会自动以科学计数法显示,比如:0.00003会显示成这样但是很多时候我并不希望它这样显示,因为这样不方便编辑,和界面其它数据格式也…

php 获取浏览器时区,获取用户时区

噜噜哒这将使您将时区作为PHP变量。我使用jQuery和PHP编写了一个函数。这是经过测试的&#xff0c;而且确实有效&#xff01;在希望将时区作为变量的PHP页面上&#xff0c;在页面顶部附近有以下代码片段&#xff1a;<?php session_start();$timezone $_SESSION[time];…

女生说话都是加密的

1 年纪轻轻就能过肩摔普京了&#xff0c;真黑带九段&#xff01;&#xff01;&#xff01;2 第一次知道蒜苔本身是这个样子的。。3 一只来自四川的兔子。。4 不敢自己坐电梯的大宝宝5 去睡沙发吧&#xff01;这里没有你的位置了&#xff01;6 虽然是拒绝但这个回复很棒&#xf…

52Exchange 2010升级到Exchange 2013-升级SH站点Ex2010到2013

20、升级SH站点Ex2010到201320.1 准备Exchange服务器两台前端两台后端的标准架构&#xff0c;准备四台EX2013服务器&#xff0c;已经部署成功&#xff0c;安装方法不再赘述进入到EAC中&#xff0c;可以看到所有EX服务器&#xff0c;包括EX2010和EX201320.2 配置SH-Site前端NLB安…

一问就打鼓,一用就糊涂,是我小看它了

听过一个说法&#xff0c;“10 个程序员里&#xff0c;10 个都说学过网络协议&#xff0c;9 个都说懂网络协议。”&#xff0c;但事实上&#xff0c;能真正轻松应对各个大厂校招/社招相关问题的&#xff0c;可能也就两三个。网络协议的不少问题都给人一种似懂非懂的感觉&#x…

Visio工具 UML的建模

&#xff35;&#xff2d;&#xff2c;描述模型的内容有三种 分别是  事物、关系和图事物有&#xff1a;类&#xff0c;接口&#xff0c;用例&#xff0c;组件&#xff0c;结点&#xff0c;交互&#xff0c;包&#xff0c;注释等类&#xff1a; 类分为三部分&#xff0c;顶部…

php获取qzonetoken,QQ一键登录实现

首先&#xff0c;登录QQ互联平台获取QQ一键登录所需的Appkey和Appsecret。2、下载QQ登录用的SDK软件包&#xff0c;可以上QQ互联官方网下载。这里用的是Connect_PHP_SDK_for_OAuth2_V1.1.zip3、在登录页面放置QQ登录的图标。如functiontoQzoneLogin(){varAwindow.open("oa…

生物系统学中的进化树构建和分析R工具包V.PhyloMaker2的介绍和详细使用

V.PhyloMaker2是一个R语言的工具包&#xff0c;专门用于构建和分析生物系统学中的进化树&#xff08;也称为系统发育树或phylogenetic tree&#xff09;。以下是对V.PhyloMaker2的一些基本介绍和使用说明&#xff1a; 论文介绍&#xff1a;V.PhyloMaker2: An updated and enla…

互联网加大赛历届作品_匠心筑梦 ——家具漆服务系统2020年度涂装大赛成功举办...

时进九月&#xff0c;秋分将至&#xff0c;天气逐渐微凉&#xff0c;展辰新材家具漆2020年度涂装大赛进入最终评审阶段。大赛历时3个月&#xff0c;国内5大区域一百多位技术能手提交了参赛作品&#xff0c;经过层层筛选&#xff0c;最终入围作品175件&#xff0c;是历届参赛作品…

面对女人的喋喋不休时,男人内心的真实想法

1 笑而不语2 击了掌你就是我的狗了。。。。3 每次看猫咪背对着自己舔毛&#xff0c;总有一种饿的感觉。。4 你看对面的那个小朋友可不可爱&#xff0c;快去抱抱他~5 猫咪三明治&#xff0c;感觉很好吃的样子&#xff01;6 看剧的时候真的不能开弹幕&#xff01;你点的每个赞&am…

Dapr牵手.NET学习笔记:绑定

绑定有点像订阅发布&#xff0c;但又不一样&#xff0c;绑定更简单&#xff0c;绑定输出&#xff08;调用方&#xff09;-绑定输入&#xff08;被调用方&#xff09;。本例是用docker compose编排&#xff0c;并且用rabbitMQ来支持&#xff0c;因为rabbitMQ支持输入和输出绑定。…

pytorch 加载模型_福利,PyTorch中文版官方教程来啦(附下载)

PyTorch 中文版官方教程来了。PyTorch 是近期最为火爆的深度学习框架之一&#xff0c;然而其中文版官方教程久久不来。近日&#xff0c;一款完整的 PyTorch 中文版官方教程出炉&#xff0c;读者朋友从中可以更好的学习了解 PyTorch 的相关细节了。教程作者来自 pytorchchina.co…

为什么睡觉时身体突然抖一下?答案吓到我了!

全世界只有3.14 % 的人关注了爆炸吧知识不知你有没有过这样的经历&#xff1a;即将进入甜美梦乡&#xff0c;突然就像触电般地抖了一下&#xff0c;或者不由自主猛地踢一下&#xff0c;瞬间被惊醒&#xff01;这到底是啥情况&#xff1f;网上的答案五花八门&#xff1a;有人说缺…

Dapper防sql注入,同一条SQL支持多种数据库

前言防SQL注入&#xff0c;常用的方案是使用Dapper执行SQL的参数化查询。例如&#xff1a;using (IDbConnection conn CreateConnection()) {string sqlCommandText "SELECT * FROM USERS WHERE IDID";Users user conn.Query<Users>(sqlCommandText, new { …

基于css3的鼠标滑动按钮动画之CSS--续

2019独角兽企业重金招聘Python工程师标准>>> btn2 /*--按钮1--*/ .container1 {width:200px;display:block;margin:20px auto;position:relative;font-family:droid arabic kufi; } .con_down1 {display:block;cursor:pointer;background-color:#F6EB96;width:190px…

rabbitmq入门_Rabbit MQ 入门

Rabbit MQ是一个通用的消息中间件&#xff0c;支持AMQP&#xff0c;STOMP&#xff0c;MQTT等多种协议安装#在OSX下可以使用如下命令来安装 rabbitmqbrew install rabbitmq基本命令#ls -al ~/rabbitmq/3.7.14/sbin/total 1104drwxr-xr-x 10 jet admin 320 May 19 14:35 .d…

94年出生,她们如今都是985高校博士生导师!

全世界只有3.14 % 的人关注了爆炸吧知识鱼羊 萧萧 发自 凹非寺量子位 报道 | 公众号 QbitAI94年出生、博士研究方向与材料相关、目前都成了985重点高校的博士生导师。拥有相同经历的两个女生&#xff0c;概率有多大&#xff1f;就在今年&#xff0c;26岁的夏娟和李晟曼&#xf…

IBM沃森为存储系统开发人员带来的启发

前一段时间&#xff0c;IBM 沃森参加了CBS的益智节目《危险边缘》(Jeopardy)&#xff0c;这是他在全国观众面前首次亮相。确切地说&#xff0c;站在中央舞台选手答题台后面的IBM沃森实际上 是不断闪烁的虚拟头像。尽管如此&#xff0c;摆在沃森面前的答题按钮却是如假包换的&am…

01Prism WPF 入门实战 - 项目准备

1.概要这一系列将进行PrismWPF技术的实战讲解。实战项目内容选型为Email邮件收发的客户端&#xff08;WeMail&#xff09;&#xff0c;项目结构简单方便大家理解。相关技术&#xff1a;C#、WPF、Prism软件开发环境&#xff1a;VS2019 、 .NET5 、 windows11需掌握技能&#xf…

redis查看key的过期时间_面试官:你在Redis中设置过带过期时间的Key吗?

点击上方小伟后端笔记关注公众号每天阅读Java干货文章熟悉Redis的同学应该知道&#xff0c;Redis的每个Key都可以设置一个过期时间&#xff0c;当达到过期时间的时候&#xff0c;这个key就会被自动删除。在为key设置过期时间需要注意的事项1、 DEL/SET/GETSET等命令会清除过期时…