mybatis-plus 会自动增加 order by_python自动撸支付宝基金答题红包
python自動擼支付寶基金答題紅包
背景
在一個套利擼羊毛群里,一群小伙伴每天在不懈地擼支付寶的基金紅包,于是自己也加入了擼紅包大軍。
于是就重復地在不同的基金里面,看有沒有答題紅包,有的話就點進去,回答一個及其容易的題目,當然,答錯了也會提示你讓你選擇另外一個答案的。
領完紅包,還要看看這個紅包能否買貨幣基金或者短期理財,或者退而求其次,能買債券基金也行的,前提得要它的紅包金額能否覆蓋手續費,而且波動不能太大。
于是玩了幾次后,覺得動作重復,且枯燥無味,為啥那些小伙伴能否如此每天樂此不疲地刷呀刷呀。
看著這小羊毛,每天擼就有點費時費神了, 于是就祭出萬能膠水器python,可以通過自動化解放自己的雙手。
最終效果視頻演示
知乎視頻?www.zhihu.compython appium自動化獲取支付寶答題紅包 (一) 獲取所有財富號的紅包
知乎視頻?www.zhihu.compython 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自动撸支付宝基金答题红包的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大数据财税与python应用_大数据跟p
- 下一篇: 互联网加大赛历届作品_匠心筑梦 ——家具