commit
						fad8ab3392
					
				
				 10 changed files with 395 additions and 0 deletions
			
			
		| @ -0,0 +1,2 @@ | ||||
| /venv/ | ||||
| /__pycache__/ | ||||
| @ -0,0 +1,53 @@ | ||||
| import requests | ||||
| import time | ||||
| 
 | ||||
| def get_jd_time(): | ||||
|    url = "https://api.m.jd.com/" | ||||
|    payload={} | ||||
|    headers = { | ||||
|       'User-Agent': 'Apifox/1.0.0 (https://apifox.com)', | ||||
|       'Accept': '*/*', | ||||
|       'Host': 'api.m.jd.com', | ||||
|       'Connection': 'keep-alive' | ||||
|    } | ||||
| 
 | ||||
|    response = requests.request("GET", url, headers=headers, data=payload) | ||||
|    delay_time = int(response.elapsed.total_seconds()*1000) | ||||
|    jd_timestamp = int(response.headers['X-API-Request-Id'][-13:]) | ||||
| 
 | ||||
|    print(jd_timestamp, time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(jd_timestamp/1000)), ', 响应时间:', int(response.elapsed.total_seconds()*1000), 'ms') | ||||
|     | ||||
|    return jd_timestamp, delay_time | ||||
| 
 | ||||
| def jd_timer(target): | ||||
|    target_timestamp = int(time.mktime(time.strptime(target, '%Y-%m-%d %H:%M:%S'))*1000) | ||||
|    print(target_timestamp) | ||||
|    jd_ts, delay = get_jd_time() | ||||
|    while jd_ts < target_timestamp: | ||||
|       delta = target_timestamp - jd_ts | ||||
|       if delta > 120*1000: | ||||
|          time.sleep(60) | ||||
|       elif delta > 60*1000: | ||||
|          time.sleep(30) | ||||
|       elif delta > 30*1000: | ||||
|          time.sleep(30) | ||||
|       elif delta > 10*1000: | ||||
|          time.sleep(1) | ||||
|       elif delta > 3*1000: | ||||
|          time.sleep(0.5) | ||||
|       elif delta > 1*1000: | ||||
|          time.sleep(0.2) | ||||
|       else: | ||||
|          if delta <= delay: | ||||
|             break | ||||
|          else: | ||||
|             sleep_val = delta - delay - 5 | ||||
|             time.sleep(sleep_val/1000) | ||||
|       jd_ts, delay = get_jd_time() | ||||
|    print('done') | ||||
| 
 | ||||
| 
 | ||||
| if __name__ == '__main__': | ||||
|    target = '2025-01-21 12:17:00' | ||||
|    jd_timer(target) | ||||
|     | ||||
| @ -0,0 +1,42 @@ | ||||
| from appium import webdriver | ||||
| from appium.options.android import UiAutomator2Options | ||||
| import time | ||||
| 
 | ||||
| 
 | ||||
| class JdClient: | ||||
|     def __init__(self, device_name): | ||||
|         self.desired_caps = { | ||||
|             'platformName': 'Android', | ||||
|             'deviceName': device_name, | ||||
|             'platformVersion': '12.0', | ||||
|             'appPackage': 'com.jingdong.app.mall', | ||||
|             'appActivity': 'main.MainActivity', | ||||
|             'noReset': True, | ||||
|             'appium:automationName': 'UiAutomator2', | ||||
|             'newCommandTimeout': 6000, | ||||
|             'udid': device_name, | ||||
|         } | ||||
|         self.device =None | ||||
| 
 | ||||
|     def initial_device(self, port): | ||||
|         print(f'设备:{self.desired_caps}') | ||||
|         self.device = webdriver.Remote(f'http://127.0.0.1:{port}/wd/hub', options=UiAutomator2Options().load_capabilities(self.desired_caps)) | ||||
|         time.sleep(5) | ||||
|         x = self.device.get_window_size()['width'] | ||||
|         y = self.device.get_window_size()['height'] | ||||
|         print(f'{self.desired_caps["deviceName"]}屏幕尺寸:{x}x{y}') | ||||
| 
 | ||||
|     def do(self, msg_dict): | ||||
|         self.device.set_clipboard_text(msg_dict['msg']) | ||||
|         print(self.device.get_clipboard_text()) | ||||
| 
 | ||||
|         time.sleep(0.5) | ||||
|         print(f'{self.desired_caps["platformName"]}点击') | ||||
|         self.device.tap([(550, 1263)], 100) | ||||
| 
 | ||||
| 
 | ||||
| if __name__ == '__main__': | ||||
|     jd_client = JdClient('127.0.0.1:16416') | ||||
|     jd_client.initial_device(4723) | ||||
|     jd_client.do('玩具乐器五折券') | ||||
| 
 | ||||
| @ -0,0 +1,84 @@ | ||||
| import uiautomator2 | ||||
| import threading | ||||
| 
 | ||||
| 
 | ||||
| class JdClient: | ||||
|     def __init__(self, device): | ||||
|         self.device = device | ||||
|         self.dev = uiautomator2.connect(device) | ||||
| 
 | ||||
|     def close_app(self): | ||||
|         self.dev.app_stop('com.jingdong.app.mall') | ||||
| 
 | ||||
|     def set_clipboard(self, text): | ||||
|         self.dev.set_clipboard(text) | ||||
| 
 | ||||
|     def open_app(self): | ||||
|         self.dev.app_start('com.jingdong.app.mall') | ||||
| 
 | ||||
|     def open_and_click(self): | ||||
|         self.dev.app_start('com.jingdong.app.mall') | ||||
| 
 | ||||
|         n = 30 | ||||
|         while n > 0: | ||||
|             if self.dev(text='跳过').exists: | ||||
|                 self.dev(text='跳过').click() | ||||
|                 break | ||||
|             else: | ||||
|                 self.dev.implicitly_wait(0.1) | ||||
|                 n -= 1 | ||||
| 
 | ||||
|         while True: | ||||
|             if self.dev(text='立即查看').exists: | ||||
|                 print(self.device, '点击立即查看') | ||||
|                 self.dev.implicitly_wait(1) | ||||
|                 self.dev(text='立即查看').click() | ||||
|                 break | ||||
|             else: | ||||
|                 self.dev.implicitly_wait(1) | ||||
|                 # print('等待1秒') | ||||
|          | ||||
|         while True: | ||||
|             if self.dev(text='为好友助力').exists: | ||||
|                 print(self.device, '为好友助力') | ||||
|                 self.dev.implicitly_wait(1) | ||||
|                 self.dev(text='为好友助力').click() | ||||
|                 break | ||||
|             else: | ||||
|                 self.dev.implicitly_wait(1) | ||||
|                 # print('等待1秒') | ||||
| 
 | ||||
|     def full_steps(self, text): | ||||
|         self.set_clipboard(text) | ||||
|         self.open_and_click() | ||||
| 
 | ||||
| if __name__ == '__main__': | ||||
|     device_list = [ | ||||
|         '127.0.0.1:16416', | ||||
|         '127.0.0.1:16448', | ||||
|         '127.0.0.1:16480', | ||||
|         '127.0.0.1:16512', | ||||
|         # '127.0.0.1:16544', | ||||
|         # '127.0.0.1:16576', | ||||
|         '127.0.0.1:16608', | ||||
|         # '127.0.0.1:16640', | ||||
|         # '127.0.0.1:16672', | ||||
|         # '127.0.0.1:16704', | ||||
|         # 'b189a9ab',  # 一加 | ||||
|         ] | ||||
|     # device_list = ['127.0.0.1:16416', | ||||
|     #            '127.0.0.1:16448'] | ||||
|      | ||||
|     jd_client_list = [] | ||||
|      | ||||
|     for dev in device_list: | ||||
|         jd_client = JdClient(dev) | ||||
|         jd_client_list.append(jd_client) | ||||
|          | ||||
|     for jd_client in jd_client_list: | ||||
|         t = threading.Thread(target=jd_client.close_app, args=()) | ||||
|         t.start() | ||||
| 
 | ||||
|     for jd_client in jd_client_list: | ||||
|         t = threading.Thread(target=jd_client.full_steps, args=('16:/¥FCWK99OZFKV¥ MU5104,⇥⤴ι🆖▾東【京东超市】分享助力赢玩具乐器五折券',)) | ||||
|         t.start() | ||||
| @ -0,0 +1,57 @@ | ||||
| from wx import get_user_message, listen_msg | ||||
| from jd_client import JdClient | ||||
| import multiprocessing, threading | ||||
| 
 | ||||
| device_list = ['127.0.0.1:16416', | ||||
|                '127.0.0.1:16448'] | ||||
| 
 | ||||
| # device_list = ['127.0.0.1:16416', | ||||
| #                '127.0.0.1:16448', | ||||
| #                '127.0.0.1:16480', | ||||
| #                '127.0.0.1:16512', | ||||
| #                '127.0.0.1:16544', | ||||
| #                '127.0.0.1:16576', | ||||
| #                '127.0.0.1:16608', | ||||
| #                '127.0.0.1:16640'] | ||||
| 
 | ||||
| listen_list = ['Honey', '分身199'] | ||||
| # listen_list = ['Honey'] | ||||
| 
 | ||||
| # for device in device_list: | ||||
| #     print(f'设备:{device}') | ||||
| #     jd_client = JdClient(device) | ||||
| #     jd_client_list.append(jd_client) | ||||
| 
 | ||||
| port = 4723 | ||||
| 
 | ||||
| device_obj_list = [] | ||||
| 
 | ||||
| for device in device_list: | ||||
|     print(device) | ||||
|     jd_client = JdClient(device) | ||||
|     device_obj_list.append(jd_client) | ||||
| 
 | ||||
| 
 | ||||
| for i, jd_client in enumerate(device_obj_list): | ||||
|     sub_port = port + i*2 | ||||
|     print(i, sub_port) | ||||
|     jd_client.initial_device(sub_port) | ||||
|     # t = threading.Thread(target=jd_client.initial_device, args=(sub_port,)) | ||||
|     # t.start() | ||||
| 
 | ||||
| msg = listen_msg(listen_list, '玩具乐器五折券') | ||||
| 
 | ||||
| print('准备完成,等待消息') | ||||
| 
 | ||||
| process_list = [] | ||||
| 
 | ||||
| for jd_client in device_obj_list: | ||||
|     # p = multiprocessing.Process(target=jd_client.do, args=({'msg':msg},)) | ||||
|     t = threading.Thread(target=jd_client.do, args=({'msg':msg},)) | ||||
|     t.start() | ||||
|     # process_list.append(p) | ||||
| 
 | ||||
| # for p in process_list: | ||||
| #     p.join() | ||||
| 
 | ||||
| print('-----------------------------------') | ||||
| @ -0,0 +1,39 @@ | ||||
| from wx import get_user_message, listen_msg | ||||
| from jd_uia import JdClient | ||||
| import multiprocessing, threading | ||||
| 
 | ||||
| # device_list = ['127.0.0.1:16416', | ||||
| #                '127.0.0.1:16448'] | ||||
| 
 | ||||
| device_list = device_list = [ | ||||
|         '127.0.0.1:16416', | ||||
|         '127.0.0.1:16448', | ||||
|         '127.0.0.1:16480', | ||||
|         '127.0.0.1:16512', | ||||
|         # '127.0.0.1:16544', | ||||
|         # '127.0.0.1:16576', | ||||
|         '127.0.0.1:16608', | ||||
|         # '127.0.0.1:16640', | ||||
|         # '127.0.0.1:16672', | ||||
|         # '127.0.0.1:16704', | ||||
|         # 'b189a9ab',  # 一加 | ||||
|         ] | ||||
| 
 | ||||
| # listen_list = ['Honey', '分身199'] | ||||
| listen_list = ['Honey'] | ||||
| 
 | ||||
| 
 | ||||
| jd_client_list = [] | ||||
|      | ||||
| for dev in device_list: | ||||
|     jd_client = JdClient(dev) | ||||
|     jd_client_list.append(jd_client) | ||||
|     t = threading.Thread(target=jd_client.close_app, args=()) | ||||
|     t.start() | ||||
| 
 | ||||
| msg = listen_msg(listen_list, '玩具乐器五折券') | ||||
| print(f'收到消息:{msg}') | ||||
| 
 | ||||
| for jd_client in jd_client_list: | ||||
|     t = threading.Thread(target=jd_client.full_steps, args=(msg,)) | ||||
|     t.start() | ||||
									
										Binary file not shown.
									
								
							
						| @ -0,0 +1,43 @@ | ||||
| from wxauto import WeChat | ||||
| import time | ||||
| 
 | ||||
| wx_client = WeChat() | ||||
| wait = 0.5 | ||||
| 
 | ||||
| 
 | ||||
| def get_user_message(name, keyword=None): | ||||
|     wx_client.ChatWith(name) | ||||
|     msgs = wx_client.GetAllMessage() | ||||
|     for msg in msgs: | ||||
|         print(msg) | ||||
|         if keyword in msg: | ||||
|             print(f"找到信息:{msg}") | ||||
|             return msg | ||||
| 
 | ||||
| def listen_msg_by_person(keyword=None): | ||||
|     print('准备就绪等待消息...') | ||||
|     while True: | ||||
|         msgs = wx_client.GetListenMessage() | ||||
|         for chat in msgs: | ||||
|             who = chat.who | ||||
|             last_msgs = msgs.get(chat) | ||||
|             for msg in last_msgs: | ||||
|                 content = msg.content | ||||
|                 print(f'{who}: {content}') | ||||
|                 if keyword in content: | ||||
|                     print(f"找到信息:{content}") | ||||
|                     return content | ||||
|         time.sleep(wait) | ||||
| 
 | ||||
| def listen_msg(listen_list=['Honey'], keyword=None): | ||||
|     for person in listen_list: | ||||
|         wx_client.AddListenChat(who=person, savepic=False) | ||||
|     return listen_msg_by_person(keyword) | ||||
|       | ||||
| 
 | ||||
| if __name__ == '__main__': | ||||
|     listen_list = ['Honey', '分身199'] | ||||
|     # listen_list = ['Honey'] | ||||
|     # get_user_message('Honey', '玩具乐器五折券') | ||||
|     listen_msg(listen_list, '玩具乐器五折券') | ||||
|      | ||||
					Loading…
					
					
				
		Reference in new issue