程序员老鬼

i茅*每日自动申购脚本

嗨,我是何老师。
抢茅台,这事简直成了全民运动。不管是大爷大妈还是小伙子姑娘,人人都想分一杯羹。
今天,我就带大家盘点一下抢茅台的主要渠道,文末再分享给大家一个抢茅台的自动化脚本,看看如何在这个抢茅台的大军中脱颖而出。
# 抢茅台的主要渠道
1、茅台自家的APP,i茅台
这是最官方的渠道,每天都可以在上面申领茅台。不过,大家都知道官方渠道有多难抢,想要在这上面抢到茅台,可能得看运气。
Image
2、振华商超线下门店
这个渠道比较局限,只在几个特定地区有。如果你刚好住在这些地方,可以去试试。
3、国美自营
同样需要抢购,而且竞争激烈。国美的自营平台也吸引了不少茅台爱好者。
4、网易严选
这个平台也是需要抢购的。网易严选凭借其品质和服务吸引了不少用户,但抢茅台这事儿上,大家起点都一样,拼的是手速和运气。
5、京东
京东的抢购方式是先预约再抢购。一般来说,只要不是黑号,抢到的几率还算不错。如果你是京东的老用户,可以多试试。
6、淘宝天猫
淘宝天猫的抢购也是预约制。如果你是会员的话,那就更容易抢到。会员的优先权在这个时候体现得淋漓尽致。
7、盒马鲜生
这个渠道需要到线下门店抢购。如果你经常逛盒马鲜生,不妨多留意一下茅台的抢购信息。
8、山姆商超会员店
山姆会员店需要参加抽签,抽中了才有购买资格。这就有点像买彩票了,全靠运气。
# 自动化抢茅台脚本
说到抢茅台,很多人都开始动用自动化脚本了。下面是一个网友用Appium和Selenium写的自动化抢茅台脚本,供大家参考:
from appium import webdriverfrom selenium.common.exceptions import NoSuchElementExceptionfrom appium.webdriver.common.touch_action import TouchActionfrom appium.webdriver.connectiontype import ConnectionTypeimport timeimport os
daily_subscribe = 0daily_tour = 0luck_day = 0daily_check = 0test = 0
desired_caps = dict()desired_caps['platformName'] = 'Android'desired_caps['platformversion'] = '7.1.1'desired_caps['deviceName'] = '192.168.0.104:5556'desired_caps['noReset'] = 'True'desired_caps['unicodeKeyboard'] = Truedesired_caps['resetKeyboard'] = True
driver = None


def handleException(): try: driver.find_element_by_xpath("//*[@text='登录']") driver.find_element_by_id("com.moutai.mall:id/etPhone").clear() driver.find_element_by_id("com.moutai.mall:id/etPhone").send_keys("15895919875") flag = driver.find_element_by_class_name('android.widget.CheckBox').get_attribute('checked') if flag == "false": driver.find_element_by_class_name('android.widget.CheckBox').click() driver.find_element_by_xpath("//*[@text='获取验证码']").click()
driver.start_activity('com.tencent.mobileqq', '.activity.SplashActivity') driver.find_element_by_xpath("//*[contains(@content-desc, 'phil')]").click() driver.find_element_by_class_name('android.widget.EditText').send_keys("i茅台登录过期,请输入验证码") driver.find_element_by_xpath("//*[@text='发送']").click() time.sleep(50) string = "" eles = driver.find_elements_by_class_name('android.widget.TextView') for i in range(len(eles)-1, -1, -1): if eles[i].text.find("yzm") != -1: string = eles[i].text[3:] break print(string) driver.press_keycode(4) # back driver.press_keycode(4) # back driver.find_element_by_id("com.moutai.mall:id/etVerifyCode").clear() driver.find_element_by_id("com.moutai.mall:id/etVerifyCode").send_keys(string) driver.find_element_by_xpath("//*[@text='登录']").click() except NoSuchElementException as e: print(e)

def daily_subcribe(): try: #driver.start_activity('com.moutai.mall', '.MainActivity') driver.find_element_by_xpath("//*[@content-desc='i茅台']").click() driver.find_element_by_xpath("//*[@text='首页']").click() driver.find_element_by_xpath("//*[@text='首页']").click() driver.find_element_by_xpath("//*[@text='首页']").click() driver.find_element_by_id("com.moutai.mall:id/ivLeft").click() driver.find_element_by_xpath("//*[@text='预约申购']").click() driver.find_element_by_xpath("//*[@text='申购']").click() driver.find_element_by_xpath("//*[@text='确定申购']").click() driver.find_element_by_xpath("//*[@text='继续申购']").click() time.sleep(2) driver.swipe(530, 1700, 530, 300, 200) driver.swipe(530, 1700, 530, 300, 200) driver.find_element_by_xpath("//*[@text='预约申购']").click() driver.find_element_by_xpath("//*[@text='申购']").click() driver.find_element_by_xpath("//*[@text='确定申购']").click() driver.find_element_by_xpath("//*[@text='继续申购']").click()
#check driver.press_keycode(4) # back time.sleep(1) driver.press_keycode(4) # back driver.find_element_by_xpath("//*[@text='我的']").click() driver.find_element_by_xpath("//*[@text='我的申购单']").click() date = driver.find_elements_by_id("com.moutai.mall:id/date_time") status = driver.find_elements_by_id("com.moutai.mall:id/draw_status") time.sleep(2) date = driver.find_elements_by_id("com.moutai.mall:id/date_time") status = driver.find_elements_by_id("com.moutai.mall:id/draw_status") string = "" for i in range(0, min(2, len(date))): string += date[i].text + status[i].text print(string) current_date = time.strftime("%Y-%m-%d", time.localtime()) str = current_date + "静候申购结果" + current_date + "静候申购结果" print(str) driver.press_keycode(4) # return if string == str: print("申购成功") return 0 else: return -1 except NoSuchElementException as e: print(e) handleException() return -1

def check_daily_subcribe(): driver.find_element_by_xpath("//*[@content-desc='i茅台']").click() driver.find_element_by_xpath("//*[@text='我的']").click() driver.find_element_by_xpath("//*[@text='我的申购单']").click() date = driver.find_elements_by_id("com.moutai.mall:id/date_time") status = driver.find_elements_by_id("com.moutai.mall:id/draw_status") string = "" for i in range(len(date)): string += date[i].text + ":" + status[i].text + "\n" print(string) driver.start_activity('com.tencent.mobileqq', '.activity.SplashActivity') driver.find_element_by_xpath("//*[contains(@content-desc, 'phil')]").click() driver.find_element_by_class_name('android.widget.EditText').send_keys(string) driver.find_element_by_xpath("//*[@text='发送']").click() time.sleep(2) driver.press_keycode(4) # back driver.press_keycode(4) # back
def xiao_mao_yun(): driver.find_element_by_xpath("//*[@content-desc='i茅台']").click() try: driver.find_element_by_xpath("//*[@text='小茅运']").click() driver.find_element_by_xpath("//*[@text='旅行']").click() driver.find_element_by_xpath("//*[contains(@text, '100耐力去旅行')]").click() driver.find_element_by_xpath("//*[@text='1650539651c20999']").click() # exit return 0 except NoSuchElementException as e: print(e)
try: driver.find_element_by_xpath("//*[@text='小茅运']").click() driver.find_element_by_xpath("//*[@text='旅行']").click() driver.find_element_by_xpath("//*[@text='领取奖励']").click() driver.find_element_by_xpath("//*[@text='我知道了']").click() # driver.find_element_by_xpath("//*[@text='我知道啦']").click() time.sleep(2) TouchAction(driver).tap(x=315, y=1704).perform() driver.find_element_by_xpath("//*[@text='1650539651c20999']").click() # exit except NoSuchElementException as e: print(e)    return 1
def unlock(): try: driver.unlock() time.sleep(1) driver.swipe(530, 1700, 530, 300, 200) TouchAction(driver).press(x=536, y=993).move_to(x=247, y=1283).move_to(x=536, y=1283).move_to(x=828, y=1283).release().perform() driver.press_keycode(3) # home except Exception as e: print(e)
def lock(): try: driver.press_keycode(4) # back time.sleep(2) driver.press_keycode(4) # back driver.press_keycode(3) # home time.sleep(2) driver.close_app() time.sleep(2)        driver.lock(0) except Exception as e: print(e)

if __name__ == '__main__': driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps) driver.implicitly_wait(20) while 1: current_time = time.localtime(time.time()) if current_time.tm_hour == 8: print(current_time) daily_subscribe = 0 daily_tour = 0 luck_day = 0 daily_check = 0 elif current_time.tm_hour == 9 and daily_subscribe is 0: print(current_time) unlock() if daily_subcribe() == 0: daily_subscribe = 1 lock() elif current_time.tm_hour == 9 and daily_tour is 0: print(current_time) unlock() if xiao_mao_yun() == 0: daily_tour = 1 lock() elif test: print(current_time) unlock()            lock()
time.sleep(5)
这个脚本实现了在安卓设备上自动化抢购茅台的过程,通过定时器和自动化操作,脚本能够在指定时间自动进行申购、检查状态和参与活动等操作。
可以看出,抢茅台不仅需要手速和运气,有时候也需要一点技术支持,但是利用这种技术手动容易费号,用的同学要小心,咱们还是以研究技术为主,想学习写这种脚本的同学,可以研究一下这本书中的内容。
抢购茅台的路上,我们需要多渠道并用,灵活应对,不仅要关注各大平台的抢购信息,还要善于使用技术手段,提升抢购成功率。祝大家都能抢到心仪的茅台!
目前,对副业感兴趣的同学,大家可以联系我微信:2546562112, 拉你进入「副业交流群」。
往期推荐
01
Chrome下载及安装保姆级教程
02
最新版ChatGPT如何下载使用教程?
03
外包现在的要求越来越高了,高攀不起。。。
Image
点分享
Image
点收藏
Image
点点赞
Image
点在看