一篇文章教你使用Python自动赚取支付宝积分,网友:发家致富?
? ? ? 本文介绍如何利用Python+uiautomator2 每日自动赚取支付宝积分。 支付宝的积分有啥用?诱惑诱惑你:
? ? ? ? ? 好了,有了动机,我们就来开始动手吧。 赢取积分的思路: 在支付宝里,有个猜股市涨跌的功能。每日13:00前,用账户的积分下注,如果猜中了涨跌,就能按比例赢到对手的积分。有时押200,赢400. ? ? ? 从赌博的概率讲,只要猜对的概率高于50%,就是稳赚不赔的,值得玩一玩。根据下图可以找到支付宝猜涨跌功能。 ? ? ? ? 怎么玩? 不懂股票,别慌。先说思路:股市开盘时间段每天上午9:30-11:30,下午13:00-15:00。所以,一般来说,每天中午吃饭的时候,你只需要打开股票软件,看一下11:30收盘的涨跌趋势,就可以大致猜出当天的趋势。 注意:你必须在下午13:00之前下注,过了13:00就是预测第二天的涨跌了。 如果当天11:30收盘涨跌不明显,你就赌很少积分,如果趋势明显,你就用200积分。就这么简单。 ? ? 具体策略是: 1)根据当日涨跌方向,判断涨跌方向。如当日涨>=0%, 则赌涨,反之赌跌。 2)根据当日涨跌幅度,选择赌积分的数量。 涨跌绝对值 >=0.4%,200积分; 涨跌绝对值 在0.4~0.3之间,100积分; 涨跌绝对值 在0.3~0.2之间,50积分; 涨跌绝对值 <0.2,20积分; 截止目前,手动应用策略的战况如何呢?支付宝统计胜率83%,相当的高。(19.2月份,支付宝活动还可以选择现金,不要积分)。如图: ? ? 但是遗憾的是,很多时候午饭吃High了,就忘记下注了。 ? ? 怎么办?怎么办? 作为技(ai)术(zhe)控(teng)的人,我决定写个Python程序,找个旧安卓机,让赚积分自动跑起来。当然这一切主要依靠Python强大的第三方库uiautomator2功能,所以前期准备环境少不了。
? 以上8个步骤都做了,理论上,我们就可以开始写程序了。如果对于获取控件元素,不了解,请本文的底部参考链接。 开始写Python 程序: #导入必备的Python库 import uiautomator2 as u2 import time import tushare as ts import schedule from datetime import datetime # 连接设备,下面连接用的序列号可由adb devices,手动查出来 d = u2.connect_usb("FUH0216830003040") # 华为 P9 # 唤醒设备d.screen_on() # turn on the screen time.sleep(2) # unlock screen,不能设置复杂图形或者密码哦 d.unlock( u") time.sleep(2)# return to home d.press("home") # 等待 time.sleep(2) # 启动支付宝应用,并进入猜涨跌界面,支付宝package name,百度可查 d.app_start("com.eg.android.AlipayGphone") # wait until the ui object appears,以下元素名,均由Weditor获得 if d(text=u"好的").wait(timeout=3.0): # return bool: d(resourceId="com.alipay.mobile.antui:id/ensure").click() if d(text=u"点击下方头像登录").wait(timeout=3.0): # return bool d(resourceId="com.ali.user.mobile.security.ui:id/userAccountImage").click() if d(text=u"刷脸登录").wait(timeout=3.0): # return bool d(resourceId="com.ali.user.mobile.security.ui:id/switchLoginMethodCenter").click() if d(text=u"密码登录").wait(timeout=3.0): # return bool d(resourceId="com.alipay.mobile.antui:id/item_name",text=u"密码登录").click() d(resourceId="com.ali.user.mobile.security.ui:id/content",className="android.widget.EditText",instance=1).set_text("写支付宝密码") time.sleep(2) d(resourceId="com.ali.user.mobile.security.ui:id/loginButton").click() if d(text=u"更多").wait(timeout=3.0): d(text=u"更多").click() if d(text=u"股票").wait(timeout=3.0): d(text=u"股票").click() if d(text=u"涨跌").wait(timeout=3.0): d(text=u"涨跌").click() # 利用Tushare库,从dataframe数据中,拿上证指数000001的涨跌情况 df = ts.get_index() for i in range(26): if df.loc[i][‘‘000001‘‘] == index_code: up_or_down = df.loc[i][‘change‘] # 根据上午涨跌幅,选择涨跌方向,并选择用多少积分下注(20,50,100,200) if up_or_down >= 0: # 根据支付宝规则,大盘不涨不跌,视为上涨 # 点击涨按钮 d.click(0.281,0.784) # 等待下个UI出现 time.sleep(3) # 下面根据涨的幅度情况下赌注 if up_or_down > 0.4: # 如果当日涨幅超过4%,赌200积分; my_print("当日涨幅超过0.4%,赌200积分") d.click(0.741,0.416) elif 0.3 < up_or_down <= 0.4: # 如果当日涨幅在0.4 和0.5之间,赌100积分; my_print("当日涨幅在0.3 和0.4之间,赌100积分") d.click(0.58,0.416) elif 0.2 < up_or_down <= 0.3: # 如果当日涨幅在0.3 和0.4之间,赌50积分; my_print("当日涨幅在0.3 和0.2之间,赌50积分") d.click(0.415,0.416) elif up_or_down <= 0.2: # 如果当日涨幅在0.3以下,赌20积分 my_print("当日涨幅在0.2以下,赌20积分") d.click(0.25,0.416) else: # up_or_down <= 0,估计这个位置是跌 # 点击跌按钮 d.click(0.727,0.784) # 等待 time.sleep(3) # 下面根据跌的幅度情况下赌注 if up_or_down < -0.4: # 如果当日跌幅超过5%,赌200积分; # 点击200积分赌注 my_print("当日跌幅超过0.4%,赌200积分") d.click(0.741,0.416) elif -0.4 <= up_or_down < -0.3: # 如果当日跌幅在0.4 和0.5之间,赌100积分; my_print("当日跌幅在0.4 和0.3之间,赌100积分") d.click(0.58,0.416) elif -0.3= < up_or_down < -0.2: # 如果当日跌幅在0.3 和0.4之间,赌50积分; my_print("当日跌幅在0.3 和0.2之间,赌50积分") d.click(0.415,0.416) elif up_or_down <= -0.2: # 如果当日跌幅在0.3以下,赌20积分 my_print("当日跌幅在0.2以下,0.416) # 点击确定按钮,下注成功 time.sleep(3) d.click(0.477,0.759) ? 以上代码(除了import段落) 封装起来取函数名 guess_up_down。 胜利在望,再加一个函数负责每日15:31 检查 当日输赢情况,并选择要积分还是要现金。函数名 index_final_check(). 部分代码如下: ? my_print("上午收盘上证涨跌幅%.2f%%" % morning_change) my_print("下午收盘上证涨跌幅%.2f%%" % final_change) if morning_change >= 0 and final_change >= 0: my_print("赌涨成功!(根据支付宝规则,大盘不涨不跌,视为上涨)") elif morning_change < 0 and final_change < 0: my_print("赌涨成功:最终如期下跌") elif final_change < 0 <= morning_change: my_print("赌涨失败:押注上涨,最终下跌!") elif morning_change < 0 <= final_change: my_print("赌跌失败:押注下跌,最终上涨!") # 点亮屏幕,并重新登录程序。 connect_device_wake_unlock() # 先退出程序,因为只有重新进入,才能看到获得积分还是现金。 d.app_stop("com.eg.android.AlipayGphone") time.sleep(5) # 重新进入程序 launch_app_enter_guess() # 点击界面,选择领取积分还是现金。 # 当然是选择现金 d(description=u"兑换权益").click() ? ? 下图,当天自动下注20积分,赢取40积分,换成了现金奖励0.2(兑换权益)。 ? ? ? ? 好了,程序看似功能实现了,但是还不行。我们总不能每天都手动运行程序吧? 那跟中午手动点一下区别不大呢。 所以,我们来定义一个主函数,利用schedule 方法按时调用我们的任务。 本次在主函数调用了一个today_is_holiday函数(具体代码略过,代码的实现方式为:周一到周五而且非法定节假日则为交易日,否则视为holiday),该函数检查当前是否为交易日,如果是,则休息24小时,下一日继续检查。否则(是交易日)则定时调用 guess_up_down 和 index_final_check函数,完成任务。 def main(): my_print("***程序跑起来无眠无休,每个交易日为您赌积分***") schedule.every().day.at("11:31").do(guess_up_down) schedule.every().day.at("15:15").do(index_final_check) while True: if today_is_holiday(): time.sleep(24 * 60 * 60) # sleep 24个小时 else: # 每10秒检测一次 schedule.run_pending() time.sleep(10) if __name__ == ‘__main__‘: main()
? 好了自动运行效果如视频(本文写在周末,所以没有真的下注,只看看效果): 程序运行起来,可以全年无休,自动在每个交易日下注,自动选择拿积分还是拿现金。 需要注意的是,下午检查积分到账的时间,不能早于15:15,因为支付宝最早于15:15公布结果。 如果想让程序更酷一点,可以微信发送结果给自己(参见:简单实用的微信消息推送神器:server酱),也可以写日志文件,记录每日盈亏情况。 Enjoy~~啦啦啦~~~ ? 提醒: 1)由于支付宝的下注UI的控件元素无法被获取,所以采用了坐标值方法来点击绝对位置。如果换做其他手机型号,就必须自己重新获取位置,并修改对应代码。建议破旧二手安卓机(>=4.4 OS),来做这件事就好了。 2)uiautomator2 系统要求:
3)我们测试机可以根据场景自动再次登录支付宝,以防止你用其他手机做过登录。要实现这点,需要你在代码 set_text("写支付宝密码") 处,替换为你支付宝密码。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |