Bläddra i källkod

MOD:初版 后台接口展示

cxyu 3 år sedan
förälder
incheckning
5806fab2bd

+ 19 - 2
web_module/tornado_api.py

@@ -99,8 +99,25 @@ class create_ad_layout_local(tornado.web.RequestHandler):
 
 # TODO:wechat_info,human_info 这两张表有空时需要进行对应改进
 class ad_status(tornado.web.RequestHandler):
-    # 1.创建情况
-    pass
+    def get(self):
+        user_id = self.get_argument("user_id", None)
+        if user_id is None:
+            self.write(json.dumps({'status': {'msg': 'url parameter error', "RetCode": 400}}))
+            return
+        sql_session = db.DBSession()
+
+        lines = sql_tools.get_ad_status(sql_session=sql_session, user_id=user_id)
+        result = []
+        for line in lines:
+            action_type, wechat_name, service_name, update_time, create_time, status = line
+            result.append(
+                {'action_type': json.loads(action_type), 'wechat_name': wechat_name, 'service_name': service_name,
+                 'update_time': update_time.strftime("%Y-%m-%d %H:%M:%S"),
+                 'create_time': create_time.strftime("%Y-%m-%d %H:%M:%S"), 'status': status})
+        # result = json.loads(result)
+        print(result)
+        self.write(json.dumps({'status': {'msg': 'success', "RetCode": 200},
+                               'ad_status_info': result}, ensure_ascii=False))
 
 
 class ad_human_info(tornado.web.RequestHandler):

+ 13 - 6
web_module/user_action.py

@@ -7,6 +7,9 @@ from sqlalchemy import Table
 import json
 import time
 
+layout_create_action = 'layout_create'
+ad_plan_create_action = 'ad_plan_create'
+
 
 def run(user_id, log_ad, db, cookie_canuse):
     sql_session = db.DBSession()
@@ -140,7 +143,7 @@ def create_layout(user_id, layout_name, wechat_json, log_ad, db, cookie_canuse):
     wechat_json = json.loads(wechat_json)
     for _ in wechat_json:
         action_info = {'user_id': user_id, 'service_name': _['service_name'], 'wechat_name': _['wechat_name'],
-                       'action_type': json.dumps({'action_type': 'layout_create', 'object_name': layout_name}),
+                       'action_type': json.dumps({'action_type': layout_create_action, 'object_name': layout_name}),
                        'status': 'todo'}
         record_insert = sql_tools.save_action_record(action_record_info=action_info,
                                                      table_action_record=action_record_table)
@@ -170,12 +173,13 @@ def create_layout(user_id, layout_name, wechat_json, log_ad, db, cookie_canuse):
             except:
                 pass
             # TODO:截图,传回错误信息
-
-        sql_tools.action_record(res, sql_session, user_id, layout_name, action_record_table, service_name, wechat_name)
+        action_type = layout_create_action
+        sql_tools.action_record(res, sql_session, action_type, user_id, layout_name, action_record_table, service_name,
+                                wechat_name)
         log_ad.refresh_driver()
 
     # 成功一个record,更新一个record
-    log_ad.driver.quite()
+    log_ad.driver.quit()
 
 
 def create_ad_plan(user_id, ad_plan_name, wechat_json, log_ad, db, cookie_canuse):
@@ -187,6 +191,7 @@ def create_ad_plan(user_id, ad_plan_name, wechat_json, log_ad, db, cookie_canuse
     action_record_table = Table('action_record', db.metadata,
                                 autoload=True, autoload_with=db.engine)
     sql_session = db.DBSession()
+    action_type = ad_plan_create_action
     # 等待页面加载完成
 
     # 1.cookies保存
@@ -220,7 +225,8 @@ def create_ad_plan(user_id, ad_plan_name, wechat_json, log_ad, db, cookie_canuse
         layout_name = typesetting_dict['idea']['jump_type-page_type']
         if not sql_tools.check_layout_alive(sql_session, service_name, wechat_name, layout_name):
             res = {'sucess': False, 'result_info': '公众号对应落地页未创建'}
-            sql_tools.action_record(res, sql_session, user_id, ad_plan_name, action_record_table, service_name,
+            sql_tools.action_record(res, sql_session, action_type, user_id, ad_plan_name, action_record_table,
+                                    service_name,
                                     wechat_name)
             continue
         if sql_tools.check_plan_alive(sql_session, service_name, wechat_name, ad_plan_name):
@@ -241,7 +247,8 @@ def create_ad_plan(user_id, ad_plan_name, wechat_json, log_ad, db, cookie_canuse
                 pass
             # 截图,传回错误信息
 
-        sql_tools.action_record(res, sql_session, user_id, ad_plan_name, action_record_table, service_name, wechat_name)
+        sql_tools.action_record(res, sql_session, action_type, user_id, ad_plan_name, action_record_table, service_name,
+                                wechat_name)
         log_ad.refresh_driver()
 
     # 成功一个record,更新一个record

+ 7 - 1
wechat_action/create_ad_layout.py

@@ -21,8 +21,14 @@ class CreateAd:
     def get_into_create_page(self):
         # 进入创建页面
         self.driver.find_element_by_id('material').click()
+        # TODO:经常发生无法点击,添加enble无效,添加延时
+        time.sleep(random.uniform(5, 7))
+
         WebDriverWait(self.driver, 10).until(lambda driver: driver.find_element_by_class_name('ui-fl-r'))
-        time.sleep(random.uniform(0.1, 0.2))
+        create_element=self.driver.find_element_by_class_name('ui-fl-r')
+        WebDriverWait(self.driver, 10).until(lambda driver: create_element.is_displayed() and create_element.is_enabled())
+
+
         self.driver.find_element_by_class_name('ui-fl-r').click()
         WebDriverWait(self.driver, 5).until(lambda driver: driver.find_element_by_css_selector(
             '#wxadcontainer > div:nth-child(1) > div:nth-child(2) > div.dialog-1fj_N480ZT > div > div > div:nth-child(1) > div.dialogCardFooter-17KpBD1lgN > button'))

+ 8 - 4
wechat_action/create_ad_plan.py

@@ -19,7 +19,7 @@ class CreateAdPlan():
     def __init__(self, task, login_ad):
         self.task = task
         # self.task_check()
-        self.login_ad=login_ad
+        self.login_ad = login_ad
         self.driver = login_ad.get_driver_loged()
         self.ad_idea_action = IdeaAction(self.driver, task)
         self.ad_human_action = HumanAd(self.driver)
@@ -176,9 +176,12 @@ class CreateAdPlan():
     def push_ad(self):
         # 提交
         time.sleep(random.uniform(3, 4))
-        self.driver.find_element_by_class_name('icon-3cAquX1RLZ').click()
-        time.sleep(random.uniform(0.5, 1))
+        agreement_element = self.driver.find_element_by_class_name('label-3_CrbQVNtc')
+        if agreement_element.get_attribute('aria-checked') != 'true':
+            self.driver.find_element_by_class_name('icon-3cAquX1RLZ').click()
+            time.sleep(random.uniform(0.5, 1))
         self.driver.find_element_by_class_name('adui-button-primary').click()
+
         WebDriverWait(self.driver, 10).until(
             lambda driver: True if len(
                 re.findall('广告已提交审核', self.driver.page_source)) else False)
@@ -208,6 +211,7 @@ class CreateAdPlan():
             self.set_ad_human_location()
             self.set_ad_human()
             self.set_ad_cost()
+
             self.set_ad_idea()
             self.push_ad()
 
@@ -216,10 +220,10 @@ class CreateAdPlan():
 
             return {'sucess': True, 'result_info': ''}
         except Exception as e:
+            raise
             # TODO:有空时讲 e 内容设置为原始内容
             if err_num > 3:
                 return {'sucess': False, 'result_info': str(e)}
             else:
                 return self.run(err_num=err_num + 1)
             pass
-

+ 2 - 0
wechat_action/create_ad_plan_idea.py

@@ -29,6 +29,7 @@ class IdeaAction:
             pass
 
     def push_promotion_page(self):
+        #TODO:对于朋友圈需要整体新建一个
         idea_dic = self.task['idea']
         select_elements = self.driver.find_elements_by_xpath('//*[@class="label-2ZOAbuO31o"]')
         # 点击跳转
@@ -218,6 +219,7 @@ class IdeaAction:
         self.push_promotion_page()
 
     def idea_pyq(self):
+        #TODO: 选择相关落地页
         print(self.driver.current_url)
         '//*[@id="wxadcontainer"]/div[1]/div/div[2]/main/div/div[2]/div[2]/div/div[1]/div[1]/div[2]/form/div[2]/div/div[1]/div[2]/div'
         WebDriverWait(self.driver, 100).until(

+ 4 - 3
wechat_action/login_ad.py

@@ -29,8 +29,8 @@ class LogIn:
     def get_driver(self):
         options = ChromeOptions()
         # 防止selenium快速崩坏
-        # options.add_argument("--disable-dev-shm-usage")
-        options.add_experimental_option('excludeSwitches', ['enable-automation'])
+        options.add_argument("--disable-dev-shm-usage")
+        # options.add_experimental_option('excludeSwitches', ['enable-automation'])
         # prefs = {"profile.managed_default_content_settings.images": 2, 'permissions.default.stylesheet': 2}
         # options.add_experimental_option("prefs", prefs)
         # #
@@ -75,6 +75,7 @@ class LogIn:
                 choice_service = _
         choice_service.click()
         # 挑选广告投放位置
+        time.sleep(3)
         input_wechat_name = self.driver.find_element_by_class_name('TextInput_new__iconRight-pekjS')
         input_wechat_name.click()
         input_wechat_name.send_keys(wechat_name)
@@ -160,7 +161,7 @@ class LogIn:
                     self.driver.switch_to.alert.accept()
                 else:
                     self.driver.switch_to.window(self.driver.window_handles[-1])
-                    self.driver.get('https://a.weixin.qq.com/client')
+                    self.driver.get('https://a.weixin.qq.com')
                     break
             except Exception as e:
                 print(e)

+ 18 - 3
wechat_action/sql_tools.py

@@ -41,7 +41,7 @@ def save_layout_typesetting_info(layout_typesetting_info, table_layout_typesetti
 
 
 def save_ad_plan_typesetting_info(ad_plan_typesetting_info, table_ad_plan_typesetting):
-    #TODO:正常action_record  返回plan_name layout_name有问题
+    # TODO:正常action_record  返回plan_name layout_name有问题
     insert_ad_plan_typesetting = table_ad_plan_typesetting.insert()
     insert_ad_plan_typesetting = insert_ad_plan_typesetting.values \
         (typesetting=ad_plan_typesetting_info['typesetting'],
@@ -132,6 +132,16 @@ def get_undo_action(sql_session, user_id):
     result_list = [line for line in lines]
     return result_list
 
+def get_ad_status(sql_session, user_id):
+    sql = '''
+       select  action_type ,wechat_name ,service_name,max(update_time ),max(create_time),status from action_record  
+       where user_id='{}'
+group by  action_type ,wechat_name ,service_name,status ;
+    '''.format(user_id)
+    cursor = sql_session.execute(sql)
+    lines = cursor.fetchall()
+    result = [line for line in lines]
+    return result
 
 def get_action_status(sql_session, user_id):
     # TODO:sql 里面添加doing,error状态的挑选
@@ -145,9 +155,12 @@ def get_action_status(sql_session, user_id):
     result = lines[0][0]
     return result
 
-def action_record(res, sql_session, user_id, object_name, action_table, service_name, wechat_name):
+
+def action_record(res, sql_session, action_type, user_id, object_name, action_table, service_name, wechat_name):
+    print('get in action record ', service_name, wechat_name, res)
     status = 'done' if res['sucess'] else 'error'
-    action_type = json.dumps({'action_type': 'ad_plan_create', 'object_name': object_name})
+    action_type = json.dumps({'action_type': action_type, 'object_name': object_name})
+    print(action_type)
     update_res = action_table.update() \
         .where(action_table.c.service_name == service_name) \
         .where(action_table.c.wechat_name == wechat_name) \
@@ -161,6 +174,7 @@ def action_record(res, sql_session, user_id, object_name, action_table, service_
     sql_session.execute(update_res)
     sql_session.commit()
 
+
 def check_layout_alive(sql_session, service_name, wechat_name, layout_name):
     sql = '''
             select count(*) from action_record ar 
@@ -185,6 +199,7 @@ def check_plan_alive(sql_session, service_name, wechat_name, plan_name):
            and action_type like '%{plan_name}%'
            and status='done'
        '''.format(service_name=service_name, wechat_name=wechat_name, plan_name=plan_name)
+    print('plan ',sql)
     cursor = sql_session.execute(sql)
     num = cursor.fetchall()[0][0]
     return num