Skip to content

Commit e2c06ff

Browse files
1.修改启动方式,方便快速启动;2.支持根据fingerprint的不同切换pc或mobile
1 parent 20796bb commit e2c06ff

File tree

6 files changed

+85
-40
lines changed

6 files changed

+85
-40
lines changed

task_service/executor/facebook/exception.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,7 @@ def check_func(self, key_words, wait=3):
242242
if iframe:
243243
for ifa in iframe:
244244
self.driver.switch_to.frame(ifa)
245-
time.sleep(1)
245+
self.sleep(1,1)
246246

247247
WebDriverWait(self.driver, wait).until(
248248
EC.presence_of_element_located((key_words_type, key)))
@@ -291,7 +291,7 @@ def process_save_phone_number_mobile_mobile(self):
291291
tel_number = WebDriverWait(self.driver, 6).until(
292292
EC.presence_of_element_located((By.CSS_SELECTOR, self.get_key_words(2))))
293293
self.click(tel_number)
294-
time.sleep(3)
294+
self.sleep()
295295
except Exception as e:
296296
logger.exception("忽略输入电话号码处理异常, e={}".format(e))
297297
return False, 2
@@ -322,7 +322,7 @@ def process_download_app_mobile(self):
322322
:return: 成功返回 True, 失败返回 False
323323
"""
324324

325-
time.sleep(3)
325+
self.sleep()
326326
try:
327327
logger.info('忽略下载app处理中')
328328
never_save_number = WebDriverWait(self.driver, 6).until(
@@ -433,7 +433,7 @@ def process_phone_sms_verify_pc(self):
433433
self.click(sub_button)
434434
except:
435435
pass
436-
rtime = random.randint(2, 4)
436+
437437
try:
438438
tel_button = self.driver.find_elements_by_css_selector('i[class^="img sp_"]')
439439
if not tel_button:
@@ -444,11 +444,11 @@ def process_phone_sms_verify_pc(self):
444444
tel_stutas = self.driver.find_elements_by_css_selector('a[role="menuitemcheckbox"]')
445445
self.click(tel_stutas[45])
446446

447-
time.sleep(rtime)
447+
self.sleep()
448448
send_tel = self.driver.find_element_by_css_selector('input[type="tel"]')
449449
self.send_keys(send_tel, "16500000000")
450450

451-
time.sleep(rtime)
451+
self.sleep()
452452
submit_button = self.driver.find_element_by_css_selector('button[id="checkpointSubmitButton"]')
453453
self.click(submit_button)
454454

@@ -462,11 +462,11 @@ def process_phone_sms_verify_pc(self):
462462
except:
463463
pass
464464
# 短信验证码
465-
time.sleep(rtime)
465+
self.sleep()
466466
tel_code = self.driver.find_element_by_css_selector('input[name="p_c"]')
467467
self.send_keys(tel_code, "414141")
468468

469-
time.sleep(rtime)
469+
self.sleep()
470470
submit_button = self.driver.find_element_by_css_selector('button[id="checkpointSubmitButton"]')
471471
self.click(submit_button)
472472

task_service/executor/web_actions.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,17 @@ def __init__(self, finger_print={}, headless=False):
1919
self.driver = None
2020
self.options = None
2121

22-
def start_chrome(self):
22+
def start_chrome(self, force_display=False, force_client=""):
2323
"""
2424
配置并启动浏览器
25-
:return:
25+
:param force_display: 强制显示chrome界面
26+
:param force_client: 强制指定启动chrome的环境, 可选输入项为"pc"或“mobile"
27+
:return: True/False
2628
"""
2729
try:
2830
# 定制浏览器启动项
2931
chrome_options = webdriver.ChromeOptions()
30-
if self.headless:
32+
if self.headless and not force_display:
3133
chrome_options.add_argument('--headless')
3234
chrome_options.add_argument('--no-sandbox')
3335
chrome_options.add_argument('--disable-extensions')
@@ -41,17 +43,16 @@ def start_chrome(self):
4143
prefs = {'profile.default_content_setting_values':{'notifications': 2}}
4244
chrome_options.add_experimental_option('prefs', prefs)
4345

44-
if self.user_agent:
46+
if self.user_agent and force_client != "mobile":
4547
chrome_options.add_argument('--user-agent={}'.format(self.user_agent))
4648

47-
if self.device:
49+
if self.device and force_client != "pc":
4850
# 移动设备仿真
4951
mobile_emulation = {
5052
'deviceName': self.device
5153
# "deviceMetrics": {"width": 600, "height":800, "pixelRatio": 4.0},
5254
# "userAgent": "Mozilla/5.0 (Linux; Android 8.0.0; XT1635-02 Build/OPNS27.76-12-22-9)"
5355
}
54-
5556
chrome_options.add_experimental_option("mobileEmulation", mobile_emulation)
5657

5758
chrome_driver = webdriver.Chrome(chrome_options=chrome_options)

task_service/start_task.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ def dispatch_test():
2424
time.sleep(600)
2525

2626

27-
def run(task_start_mode='new', update_interval=30):
27+
def run(task_start_mode='new', update_interval=60):
2828
"""
2929
启动任务调度系统
3030
:param task_start_mode: 'new':清空缓存,从头开始; 'restart': 则继续上一次结束点开始, 之前未处理完的任务将继续被执行
@@ -59,8 +59,8 @@ def run(task_start_mode='new', update_interval=30):
5959

6060

6161
if __name__ == '__main__':
62-
# run(task_start_mode=task_start_mode, update_interval=interval)
63-
run(task_start_mode="restart", update_interval=30)
62+
# global env, task_start_mode, interval
63+
run(task_start_mode=task_start_mode, update_interval=interval)
6464

6565
# pipenv run python3 start_task.py [test|pro] [new|restart]
6666
# eg: python3 start_task.py test new

task_service/start_worker.py

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
"""
99
import os
1010
import sys
11+
import datetime
1112
from celery import Celery, platforms
1213
from kombu import Exchange, Queue
1314
from config import load_config, get_broker_and_backend
@@ -31,7 +32,7 @@
3132
broker, backend = get_broker_and_backend()
3233
worker_log_path = ''
3334
beat_log_path = ''
34-
worker_log_path = os.path.join(os.path.dirname(os.path.dirname(__file__)) + '/logs', 'celery.log')
35+
worker_log_path = os.path.join(os.path.dirname(os.path.dirname(__file__)) + '/logs', 'celery_{}.log'.format(datetime.datetime.now().strftime("%Y-%m-%d_%H_%M_%S")))
3536
beat_log_path = os.path.join(os.path.dirname(os.path.dirname(__file__)) + '/logs', 'beat.log')
3637

3738

@@ -61,4 +62,27 @@
6162
# 'options': {'queue': 'feed_account_queue', 'routing_key': 'for_feed_account'}
6263
# }
6364
# }
64-
#celery -A tasks.workers -Q default,China,American,Japan worker -l info -c 4 -Ofair -f logs/celery.log -env pro
65+
#celery -A start_worker -Q default,China,American,Japan worker -l info -c 4 -Ofair -f logs/celery.log -env pro
66+
67+
if __name__ == '__main__':
68+
import subprocess
69+
env = "pro"
70+
save_log = True
71+
input_env = input("Please input execute environment(pro/test):")
72+
if input_env and input_env in ["pro", 'test']:
73+
env = input_env
74+
else:
75+
print("use default env: pro")
76+
77+
is_log_file = input("is save log to file(yes/no):")
78+
if is_log_file and is_log_file in ["yes", 'no']:
79+
if "no" in is_log_file:
80+
save_log = False
81+
82+
if save_log:
83+
subprocess.call("celery -A start_worker -Q default,China,American,Japan worker -l info -c 4 -Ofair -f logs/celery_{}.log -env {}".format(
84+
datetime.datetime.now().strftime("%Y-%m-%d_%H_%M_%S"), env), shell=True)
85+
else:
86+
subprocess.call(
87+
"celery -A start_worker -Q default,China,American,Japan worker -l info -c 4 -Ofair -env {}".format(env), shell=True)
88+

task_service/tasks/tasks.py

Lines changed: 32 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
from start_worker import app
1818
from config import logger
1919
from executor.facebook.mobile_actions import FacebookMobileActions
20+
from executor.facebook.pc_actions import FacebookPCActions
2021
from executor.facebook.exception import FacebookExceptionProcessor
2122
from tasks.task_help import TaskHelper
2223

@@ -61,43 +62,55 @@ def fb_auto_feed(self, inputs):
6162
logger.warning('is_in_verifying return True, task id={}, account={}'.format(tsk_hlp.task_id, tsk_hlp.account))
6263
return tsk_hlp.make_result(err_msg='is_in_verifying return True')
6364

64-
# 分步执行任务
65-
# 启动浏览器
66-
facebook_mobile = FacebookMobileActions(account_info=tsk_hlp.account_info,
65+
# 根据账号携带的finger_print 信息来决定启动pc或者mobile
66+
if tsk_hlp.active_browser.get("device", ""):
67+
chrome_env = "mobile"
68+
fb_actions = FacebookMobileActions(account_info=tsk_hlp.account_info,
69+
finger_print=tsk_hlp.active_browser,
70+
headless=tsk_hlp.headless)
71+
else:
72+
chrome_env = "pc"
73+
fb_actions = FacebookPCActions(account_info=tsk_hlp.account_info,
6774
finger_print=tsk_hlp.active_browser,
6875
headless=tsk_hlp.headless)
69-
ret = facebook_mobile.start_chrome()
76+
77+
78+
# 分步执行任务
79+
# 启动浏览器
80+
ret = fb_actions.start_chrome()
7081
if not ret:
7182
logger.error('start chrome failed.')
7283
return tsk_hlp.make_result()
7384

74-
facebook_mobile.set_exception_processor(FacebookExceptionProcessor(facebook_mobile.driver, env="mobile", account=facebook_mobile.account, gender=facebook_mobile.gender))
85+
fb_exp = FacebookExceptionProcessor(fb_actions.driver, env=chrome_env, account=fb_actions.account,
86+
gender=fb_actions.gender)
87+
fb_actions.set_exception_processor(fb_exp)
7588
account = tsk_hlp.account
7689
password = tsk_hlp.password
77-
ret, err_code = facebook_mobile.login()
90+
ret, err_code = fb_actions.login()
7891
if not ret:
7992
msg = 'login failed, account={}, password={}, err_code={}'.format(account, password, err_code)
8093
logger.error(msg)
81-
tsk_hlp.screenshots(facebook_mobile.driver, err_code=err_code)
94+
tsk_hlp.screenshots(fb_actions.driver, err_code=err_code)
8295
return tsk_hlp.make_result(err_code=err_code, err_msg=msg)
8396

8497
last_login = datetime.datetime.now()
85-
cookies = facebook_mobile.get_cookies()
98+
cookies = fb_actions.get_cookies()
8699
logger.info('login succeed. account={}, password={}, cookies={}'.format(account, password, cookies))
87100

88-
ret, err_code = facebook_mobile.browse_home()
101+
ret, err_code = fb_actions.browse_home()
89102
if not ret:
90103
msg = 'home_browsing, account={}, err_code={}'.format(account, err_code)
91104
logger.error(msg)
92-
tsk_hlp.screenshots(facebook_mobile.driver, err_code=err_code)
105+
tsk_hlp.screenshots(fb_actions.driver, err_code=err_code)
93106
return tsk_hlp.make_result(err_code=err_code, err_msg=msg, last_login=last_login, cookies=cookies)
94107

95108
tsk_hlp.random_sleep()
96109
# if tsk_hlp.random_select():
97-
ret, err_code = facebook_mobile.browse_user_center(limit=random.randint(2, 5))
110+
ret, err_code = fb_actions.browse_user_center(limit=random.randint(2, 5))
98111
if not ret:
99112
err_msg = 'user_home failed, err_code={}'.format(err_code)
100-
tsk_hlp.screenshots(facebook_mobile.driver, err_code=err_code)
113+
tsk_hlp.screenshots(fb_actions.driver, err_code=err_code)
101114
return tsk_hlp.make_result(err_code=err_code, err_msg=err_msg, last_login=last_login, cookies=cookies)
102115

103116
# 账号是否可以继续用作其他用途
@@ -109,20 +122,20 @@ def fb_auto_feed(self, inputs):
109122
if tsk_hlp.is_should_add_friend():
110123
fks = tsk_hlp.get_friend_keys(1)
111124
if fks:
112-
ret, err_code = facebook_mobile.add_friends(search_keys=fks, limit=random.randint(1, 3))
125+
ret, err_code = fb_actions.add_friends(search_keys=fks, limit=random.randint(1, 3))
113126
if not ret:
114127
err_msg = 'add_friends failed, err_code={}'.format(err_code)
115-
tsk_hlp.screenshots(facebook_mobile.driver, err_code=err_code)
128+
tsk_hlp.screenshots(fb_actions.driver, err_code=err_code)
116129
return tsk_hlp.make_result(err_code=err_code, err_msg=err_msg, last_login=last_login, cookies=cookies)
117130
last_add_friend = datetime.datetime.now()
118131

119132
tsk_hlp.random_sleep()
120133
msgs = tsk_hlp.get_chat_msgs()
121134
if msgs:
122-
ret, err_code = facebook_mobile.chat(contents=msgs, friends=random.randint(1, 3))
135+
ret, err_code = fb_actions.chat(contents=msgs, friends=random.randint(1, 3))
123136
if not ret:
124137
msg = "send_message failed, err_code={}".format(err_code)
125-
tsk_hlp.screenshots(facebook_mobile.driver, err_code=msg)
138+
tsk_hlp.screenshots(fb_actions.driver, err_code=msg)
126139
return tsk_hlp.make_result(err_code=err_code, err_msg=msg, last_login=last_login, cookies=cookies)
127140

128141
last_chat = datetime.datetime.now()
@@ -131,10 +144,10 @@ def fb_auto_feed(self, inputs):
131144
if tsk_hlp.is_should_post():
132145
send_state = tsk_hlp.get_posts()
133146
if send_state and send_state.get('post', ''):
134-
ret, err_code = facebook_mobile.post_status(contents=send_state)
147+
ret, err_code = fb_actions.post_status(contents=send_state)
135148
if not ret:
136149
msg = "send_facebook_state failed, err_code={}".format(err_code)
137-
tsk_hlp.screenshots(facebook_mobile.driver, err_code=err_code)
150+
tsk_hlp.screenshots(fb_actions.driver, err_code=err_code)
138151
return tsk_hlp.make_result(err_code=err_code, err_msg=msg, last_login=last_login, cookies=cookies)
139152
last_post = datetime.datetime.now()
140153

@@ -146,7 +159,7 @@ def fb_auto_feed(self, inputs):
146159
# self.retry(countdown=10 ** self.request.retries)
147160
return tsk_hlp.make_result(err_msg=err_msg)
148161
finally:
149-
facebook_mobile.quit()
162+
fb_actions.quit()
150163
return tsk_hlp.make_result(True, last_login=last_login, last_chat=last_chat,
151164
last_post=last_post, last_add_friend=last_add_friend, cookies=cookies)
152165

task_service/utils/utils.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,23 @@ def parse_args():
1212
解析命令行参数
1313
:return:
1414
"""
15-
logger.info('start command={}'.format(sys.argv))
1615
env = 'pro' # pro/test
1716
task_start_mode = 'new' # new/restart
1817
if len(sys.argv) >= 3:
1918
env = sys.argv[1]
2019
task_start_mode = sys.argv[2]
2120
elif len(sys.argv) == 2:
2221
env = sys.argv[1]
22+
else:
23+
input_env = input("Please input task execute environment(pro/test):")
24+
if input_env and input_env in ["pro", "test"]:
25+
env = input_env
26+
27+
input_mode = input("Please input task start mode(new/restart):")
28+
if input_mode and input_mode in ["new", "restart"]:
29+
task_start_mode = input_mode
2330

2431
load_config(env)
2532
interval = get_task_args()['update_interval']
26-
logger.info("start args: env={}, task_start_mode={}, update_interval={}".format(env, task_start_mode, interval))
33+
logger.info("---Task module start args: env={}, task_start_mode={}, update_interval={}".format(env, task_start_mode, interval))
2734
return env, task_start_mode, interval

0 commit comments

Comments
 (0)