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

背景

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

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

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

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

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

最终效果视频演示

知乎视频​www.zhihu.com

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

知乎视频​www.zhihu.com

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

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

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

实现技术路径

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

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

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

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也没人发现哈。

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

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

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

就可以获取啦。

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

  1. mybatis-plus 会自动增加 order by_自动化常见问题:SCL、变压器、欧姆龙软件、机器人控制分享...

    <基于SCL高级编程语言的FIFO程序编写01>问题解答 问:V15与V14区别在哪? 答:基本的功能都是一样的,可能会增加一些功能和做一些优化,具体的功能可以在西门子官网查到 问:程序中 ...

  2. word 流水号 自动增加_以自动组卷软件为例浅谈Python自动化办公

    Python作为一种学习门槛低.简洁并且编码效率高的热门编程语言,在很多行业都有广泛的应用.在自动化办公领域,掌握一点Python知识就能够把或复杂或繁琐的工作交由计算机自动处理,堪称解放劳动力的利器 ...

  3. [问题]DotNet 项目如何实现在构建时 Build 号自动增加?

    [问题]DotNet 项目如何实现在构建时 Build 号自动增加? 继续昨天的问题,今天在Google上找了一下,没有找到很好的方案. 目前找到的解决方案有以下几种: 1.使用一个地三方的 VS.N ...

  4. MyBatis基础入门《九》ResultMap自动匹配

    MyBatis基础入门<九>ResultMap自动匹配 描述: Mybatis执行select查询后,使用ResultMap接收查询的数据结果. 实体类:TblClient.java 接口 ...

  5. 自动增加asp元件及onclick

    <html> <head> <title>化境上传</title> <meta http-equiv="Content-Type&quo ...

  6. MySQL设置表的字段值自动增加

    MySQL中,为插入的新纪录自动生成唯一的ID,使用AUTO_INCREMENT约束实现. AUTO_INCREMENT字段可以是任何整数类型,默认情况下,该字段的值是从1开始自增的. 使用AUTO_ ...

  7. jQuery 表格自动增加

    <!DOCTYPE html><html dir="ltr" lang="zh-CN"><head><meta cha ...

  8. mysql 自增语句_Mysql 自动增加设定基值的语句 | 很文博客

    有时候需要为自动增加的字段设置基值,用下面的语句即可. 核心代码: ALTER TABLE 表名 AUTO_INCREMENT = 设定的值 MySQL ALTER语法中ALTER [IGNORE] ...

  9. html 点击按钮js自增,JS实现点击按钮自动增加一个单元格的方法

    本文实例讲述了JS实现点击按钮自动增加一个单元格的方法.分享给大家供大家参考.具体分析如下: 这是一个网页在线自助生成表格的特效代码. 核心功能代码是JS实现,点击网页中的添加按钮,网页中自动增加一个 ...

最新文章

  1. 什么叫计算机网络阻塞,计算机网络体系结构的阻塞控制是什么呢?
  2. 神奇的HTML5离线存储(应用程序缓存)
  3. webpackJsonp is not defined?
  4. SwitchHosts!提示没有切换权限:C:\WINDOWS\system32\drivers\etc\host 文件无法修改
  5. 使用 store 来优化 React 组件
  6. java 水仙花数问题(java50道经典编程题)
  7. Java程序设计基础思维导图
  8. matlab prn文件,教你妙用PRN文件 实现文档的换机打印
  9. ACER 4741G
  10. 无法打开包括文件: “ui_XXX.h”: No such file or directory
  11. Premiere 2020安装及Premiere缺失字体处理
  12. android 临时文件存储,缓存和临时文件/文件夹删除android
  13. 免费压缩视频大小最佳方法?
  14. Ubuntu下GNOME桌面美化
  15. 帆软连接好数据库,字段带有中文的显示乱码解决方案
  16. 中规中矩的linux安装redis
  17. c语言有n个人围成一圈用指针,C语言 有n个人围成一圈,按顺序从1到n编号.从第一个人开始报数,报数3的人退出圈子...
  18. 一键重装系统后电脑黑屏怎么办,电脑系统重装黑屏
  19. 学习笔记:WEB安全防护
  20. HTML---- 渐变颜色, P强制不换行、自动换行、强制换行

热门文章

  1. VS Code 摸鱼插件开发小记
  2. 一本让我多花2倍时间读的书
  3. Ocelot(六)- 架构图
  4. 将传统 WPF 程序迁移到 DotNetCore 3.0
  5. c# 弹性和瞬态故障处理库Polly 学习
  6. Razor Page Library:开发独立通用RPL(内嵌wwwroot资源文件夹)
  7. VS Tools for AI全攻略(2)低配置虚拟机也能玩转深度学习,无需NC/NV系列
  8. ASP.NET Core 2.0 自定义 _ViewStart 和 _ViewImports 的目录位置
  9. frameset在html5下用什么代替_速速围观!冬至吃货地图来啦~蚌埠的吃货们,你们今天吃什么?...
  10. Win11 的日历 替代