Browse Source

ADD:上传大体完成

cxyu 4 years ago
parent
commit
46e88079a6
1 changed files with 247 additions and 22 deletions
  1. 247 22
      wechat_action/create_ad.py

+ 247 - 22
wechat_action/create_ad.py

@@ -5,6 +5,7 @@ from selenium.webdriver.common.by import By
 from selenium.webdriver.support import expected_conditions as EC
 from selenium.webdriver.support.wait import WebDriverWait
 from selenium.webdriver import ChromeOptions
+from selenium.webdriver.common.keys import Keys
 import logging
 import time
 import random
@@ -40,6 +41,20 @@ class CreateAd:
         # 创建编排
         pass
 
+    def set_background_color(self):
+        color_buttons = self.driver.find_elements_by_class_name('adui-cp-picker')
+        c_buttons_can_use = []
+        for _ in color_buttons:
+            if _.is_displayed() and _.is_enabled():
+                c_buttons_can_use.append(_)
+        c_buttons_can_use[0].click()
+        time.sleep(random.uniform(0.2, 0.3))
+        input_elements = self.driver.find_elements_by_xpath('//input[@class="adui-input-base"]')
+        for _ in input_elements:
+            if _.is_enabled() and _.is_displayed() and _.get_attribute("value") == 'FFFFFF':
+                _.click()
+                _.send_keys('F7F7F7')
+
     def set_head_assemb(self, info):
         def single_page_set():
 
@@ -67,7 +82,7 @@ class CreateAd:
                             _.click()
                             chose_over = True
                             break
-                if chose_over or len(can_use_button)==0:
+                if chose_over or len(can_use_button) == 0:
                     break
                 # 翻到最后一页时停止
                 page_text = self.driver.find_element_by_class_name('count_small-37CcvfzoTl').text
@@ -132,7 +147,6 @@ class CreateAd:
             for _ in input_elements:
                 if '输入关键词搜索素材' in _.get_attribute('placeholder'):
                     input_find_element = _
-            from selenium.webdriver.common.keys import Keys
 
             for _ in info_v:
                 file_name = os.path.basename(_)
@@ -166,6 +180,53 @@ class CreateAd:
 
             logging.info('头版多图选择 结束')
 
+        def movie_set():
+            file_name = os.path.basename(info_v)
+            self.driver.find_element_by_xpath('//*[@id="stage-sidebar"]/div[1]/div/div[3]/div/div').click()
+            self.driver.find_element_by_xpath('//*[@class="comptEditButton-2JsnAFdOGZ"]').click()
+
+            WebDriverWait(self.driver, 100).until(
+                lambda x: len([_ for _ in self.driver.find_elements_by_class_name('title-29sncpKgTl') if
+                               _.is_displayed() and _.is_enabled()]) > 0)
+            #
+            turn_page_buttons = self.driver.find_elements_by_class_name('paginationIcon-1EfoH0sNRF')
+            can_use_button = []
+            for _ in turn_page_buttons:
+                if _.is_enabled() and _.is_displayed():
+                    can_use_button.append(_)
+            # 不断翻页获取到元素为止
+            chose_over = False
+            while True:
+                page_elements = self.driver.find_elements_by_class_name('title-29sncpKgTl')
+                for _ in page_elements:
+                    if _.is_displayed() and _.is_enabled():
+                        if file_name in _.text:
+                            _.click()
+                            chose_over = True
+                            break
+                if chose_over or len(can_use_button) == 0:
+                    # can_use_button 数量说明是否可以翻页,如果不可以翻页,则直接停止
+                    break
+                # 翻到最后一页时停止
+                page_text_elements = self.driver.find_elements_by_class_name('count_small-37CcvfzoTl')
+                for _ in page_text_elements:
+                    if _.is_enabled() and _.is_displayed():
+                        page_text = _.text
+                        page_text_element = _
+
+                page_nums = re.findall('\d+', page_text)
+                if int(page_nums[0].strip()) == int(page_nums[1].strip()):
+                    break
+                # 翻页
+                can_use_button[2].click()
+                # 确保翻页成功
+                WebDriverWait(self.driver, 10).until(
+                    lambda x: page_text != page_text_element.text)
+            sc_buttons = self.driver.find_elements_by_id('test_material_container_confirm')
+            for _ in sc_buttons:
+                if _.is_enabled() and _.is_displayed():
+                    _.click()
+
         info_key = list(info.keys())[0]
         info_v = info[info_key]
 
@@ -173,6 +234,9 @@ class CreateAd:
             single_page_set()
         if info_key == 'multi_page':
             multi_page_set()
+        if info_key == 'movie':
+            movie_set()
+
         # 设置头部组件
         pass
 
@@ -190,7 +254,6 @@ class CreateAd:
             lambda x: len([_ for _ in self.driver.find_elements_by_class_name('title-29sncpKgTl') if
                            _.is_displayed() and _.is_enabled()]) > 0)
 
-
         turn_page_buttons = self.driver.find_elements_by_class_name('paginationIcon-1EfoH0sNRF')
         can_use_button = []
         for _ in turn_page_buttons:
@@ -206,8 +269,8 @@ class CreateAd:
                         _.click()
                         chose_over = True
                         break
-            if chose_over or len(can_use_button)==0:
-                #can_use_button 数量说明是否可以翻页,如果不可以翻页,则直接停止
+            if chose_over or len(can_use_button) == 0:
+                # can_use_button 数量说明是否可以翻页,如果不可以翻页,则直接停止
                 break
             # 翻到最后一页时停止
             page_text_elements = self.driver.find_elements_by_class_name('count_small-37CcvfzoTl')
@@ -237,7 +300,7 @@ class CreateAd:
                 'btnFist-uueBS6DQFa')
             WebDriverWait(self.driver, 4).until(
                 lambda x: (_.is_displayed() and _.is_enabled()))
-            #已经出现但任需要等待
+            # 已经出现但任需要等待
             time.sleep(1)
             _.click()
 
@@ -249,23 +312,174 @@ class CreateAd:
                     _.click()
         except Exception as e:
             logging.info(e)
-            pass
         logging.info('图片模块设置结束')
 
-    def set_title(self):
+    def set_title(self, title_content):
         # 设置标题模块
-        pass
+        self.driver.find_element_by_xpath('//*[@id="stage-sidebar"]/section/div[2]/div[5]/div/div').click()
+        time.sleep(random.uniform(0.2, 0.3))
+        input_elements = self.driver.find_elements_by_xpath('//textarea[@class="adui-input-base"]')
+        for _ in input_elements:
+            if _.is_enabled() and _.is_displayed():
+                _.send_keys(title_content)
+
+        color_buttons = self.driver.find_elements_by_class_name('adui-cp-picker')
+        c_buttons_can_use = []
+        for _ in color_buttons:
+            if _.is_displayed() and _.is_enabled():
+                c_buttons_can_use.append(_)
+        c_buttons_can_use[1].click()
+        time.sleep(random.uniform(0.2, 0.3))
+
+        input_elements = self.driver.find_elements_by_tag_name('input')
+        for _ in input_elements:
+            if _.is_enabled() and _.is_displayed() and _.get_attribute("value") == '595959':
+                _.click()
+                _.send_keys('DE2821')
+        big_elements = self.driver.find_elements_by_class_name('adui-button-content')
+        for _ in big_elements:
+            if _.text == '加粗' and _.is_displayed() and _.is_enabled():
+                _.click()
+        loc_buttons = self.driver.find_elements_by_xpath("//div[contains(@class, 'adui-button-group_banner')]//button")
+        loc_buttons_can_use = []
+        for _ in loc_buttons:
+            if _.is_enabled() and _.is_displayed():
+                loc_buttons_can_use.append(_)
+        loc_buttons_can_use[1].click()
 
-    def set_content(self):
+        str_buttons = self.driver.find_elements_by_xpath("//*[@class='adui-select-selection__rendered']")
+        str_buttons_can_use = []
+        for _ in str_buttons:
+            if _.is_displayed() and _.is_enabled():
+                str_buttons_can_use.append(_)
+        str_buttons_can_use[1].click()
+        time.sleep(random.uniform(1, 3))
+
+        str_num_buttons = self.driver.find_elements_by_xpath("//*[@class='adui-select-dropdown-menu-item']")
+        str_num_can_use = []
+        for _ in str_num_buttons:
+            if _.is_displayed() and _.is_enabled():
+                str_num_can_use.append(_)
+        str_num_can_use[4].click()
+
+    def set_content(self, content_content):
         # 输入文本内容
-        pass
+        self.driver.find_element_by_xpath('//*[@id="stage-sidebar"]/section/div[2]/div[5]/div/div').click()
+        time.sleep(random.uniform(0.2, 0.3))
+        input_elements = self.driver.find_elements_by_xpath('//textarea[@class="adui-input-base"]')
+        for _ in input_elements:
+            if _.is_enabled() and _.is_displayed():
+                _.send_keys(content_content)
+        str_buttons = self.driver.find_elements_by_xpath("//*[@class='adui-select-selection__rendered']")
+        str_buttons_can_use = []
+        for _ in str_buttons:
+            if _.is_displayed() and _.is_enabled():
+                str_buttons_can_use.append(_)
+        str_buttons_can_use[1].click()
+        time.sleep(random.uniform(1, 3))
+        str_num_buttons = self.driver.find_elements_by_xpath("//*[@class='adui-select-dropdown-menu-item']")
+        str_num_can_use = []
+        for _ in str_num_buttons:
+            if _.is_displayed() and _.is_enabled():
+                str_num_can_use.append(_)
+        str_num_can_use[3].click()
 
-    def set_follow_button(self):
-        # TODO:先暂定设置三种格式
+    def set_follow_button(self, button_type):
         # 设置关注按钮
+        self.driver.find_element_by_xpath('//*[@id="stage-sidebar"]/section/div[4]/div[2]/div/div').click()
+        if button_type == 1:
+            input_elements = self.driver.find_elements_by_xpath('//input[@class="adui-input-base"]')
+            for _ in input_elements:
+                if _.is_enabled() and _.is_displayed() and _.get_attribute("value") == '关注公众号':
+                    _.click()
+                    _.clear()
+                    for i in range(10):
+                        _.send_keys(Keys.BACKSPACE)
+                    _.send_keys('保存阅读记录')
+            big_elements = self.driver.find_elements_by_xpath('//span[@class="adui-button-content"]')
+            for _ in big_elements:
+                if _.text == '加粗' and _.is_displayed() and _.is_enabled():
+                    _.click()
+            input_elements = self.driver.find_elements_by_xpath('//input[@class="adui-input-base"]')
+            for _ in input_elements:
+                if _.is_enabled() and _.is_displayed() and _.get_attribute("value") == '07C160':
+                    _.click()
+                    _.send_keys('DE2821')
+        if button_type == 2:
+            input_elements = self.driver.find_elements_by_xpath('//input[@class="adui-input-base"]')
+            for _ in input_elements:
+                if _.is_enabled() and _.is_displayed() and _.get_attribute("value") == '关注公众号':
+                    _.click()
+                    _.clear()
+                    for i in range(10):
+                        _.send_keys(Keys.BACKSPACE)
+                    _.send_keys('点击此处,继续阅读')
+            big_elements = self.driver.find_elements_by_xpath('//span[@class="adui-button-content"]')
+            for _ in big_elements:
+                if _.text == '加粗' and _.is_displayed() and _.is_enabled():
+                    _.click()
+            input_elements = self.driver.find_elements_by_xpath('//input[@class="adui-input-base"]')
+            for _ in input_elements:
+                if _.is_enabled() and _.is_displayed() and _.get_attribute("value") == '07C160':
+                    _.click()
+                    _.send_keys('DE2821')
+            size_buttons = self.driver.find_elements_by_xpath('//input[@class="adui-input-base"]')
+            size_buttons_can_use = []
+            for _ in size_buttons:
+                if _.is_enabled() and _.is_displayed() and _.get_attribute("value") == '28':
+                    size_buttons_can_use.append(_)
+            size_buttons_can_use[0].click()
+            for i in range(4):
+                size_buttons_can_use[0].send_keys(Keys.BACKSPACE)
+            size_buttons_can_use[0].send_keys('0')
+            size_buttons_can_use[1].click()
+            for i in range(4):
+                size_buttons_can_use[1].send_keys(Keys.BACKSPACE)
+            size_buttons_can_use[1].send_keys('0')
+
+        if button_type == 3:
+            input_elements = self.driver.find_elements_by_xpath('//input[@class="adui-input-base"]')
+            for _ in input_elements:
+                if _.is_enabled() and _.is_displayed() and _.get_attribute("value") == '关注公众号':
+                    _.click()
+                    _.clear()
+                    for i in range(10):
+                        _.send_keys(Keys.BACKSPACE)
+                    _.send_keys('点我,继续阅读')
+            big_elements = self.driver.find_elements_by_xpath('//span[@class="adui-button-content"]')
+            for _ in big_elements:
+                if _.text == '加粗' and _.is_displayed() and _.is_enabled():
+                    _.click()
+            input_elements = self.driver.find_elements_by_xpath('//input[@class="adui-input-base"]')
+            for _ in input_elements:
+                if _.is_enabled() and _.is_displayed() and _.get_attribute("value") == '07C160':
+                    _.click()
+                    _.send_keys('FFFFFF')
+            input_elements = self.driver.find_elements_by_xpath('//input[@class="adui-input-base"]')
+            for _ in input_elements:
+                if _.is_enabled() and _.is_displayed() and _.get_attribute("value") == 'FFFFFF':
+                    _.click()
+                    _.send_keys('DE2821')
+                    break
+            size_buttons = self.driver.find_elements_by_xpath('//input[@class="adui-input-base"]')
+            size_buttons_can_use = []
+            for _ in size_buttons:
+                if _.is_enabled() and _.is_displayed() and _.get_attribute("value") == '28':
+                    size_buttons_can_use.append(_)
+            size_buttons_can_use[0].click()
+            for i in range(4):
+                size_buttons_can_use[0].send_keys(Keys.BACKSPACE)
+            size_buttons_can_use[0].send_keys('0')
+            size_buttons_can_use[1].click()
+            for i in range(4):
+                size_buttons_can_use[1].send_keys(Keys.BACKSPACE)
+            size_buttons_can_use[1].send_keys('100')
+
+    def set_movie(self):
+        # 设置视频
         pass
 
-    def set_set_text_button(self):
+    def set_text_button(self):
         # 设置图文按钮
         pass
 
@@ -392,9 +606,12 @@ class CreateAd:
         pass
 
     def get_layout(self):
+        # TODO:设置重试机制,然后错误后试错几次,查看是否成功
+
         # 得到编排
 
-        layout = {-1: {'page': '/usr/share/wallpapers/deepin/Beach_by_Samuel_Scrimshaw.jpg'},
+        layout = {-2: {'bc_color': True},
+                  -1: {'page': '/usr/share/wallpapers/deepin/Beach_by_Samuel_Scrimshaw.jpg'},
                   0: {'title': '这是标题'},
                   1: {'content': '这是文本'},
                   2: {'follow_button': 1},
@@ -413,28 +630,36 @@ class CreateAd:
                   0: {'page': '/usr/share/wallpapers/deepin/Beach_by_Samuel_Scrimshaw.jpg'}
                   }
         layout = {
-            -1: {'page': '/usr/share/wallpapers/deepin/Reflection_of_the_Kanas_Lake_by_Wang_Jinyu.jpg'},
-            0: {'page': '/usr/share/wallpapers/deepin/Reflection_of_the_Kanas_Lake_by_Wang_Jinyu.jpg'},
-            1: {'page': '/usr/share/wallpapers/deepin/Beach_by_Samuel_Scrimshaw.jpg'},
-            2: {'page': '/usr/share/wallpapers/deepin/The_Gongga_Mountain_by_wangjinyu.jpg'},
+            -2: {'bc_color': True},
+            -1: {'movie': '/home/cxyu/Downloads/老奶奶.mp4'},
+            0: {'title': '第一章'},
+            1: {'content': 'asdfasdf'},
+            2: {'follow_button': 1},
             3: {'page': '/usr/share/wallpapers/deepin/Reflection_of_the_Kanas_Lake_by_Wang_Jinyu.jpg'},
-
+            4: {'title': '第二章'},
+            5: {'content': 'asdfadsfasdfasd'},
+            6: {'follow_button': 2},
+            7: {'follow_button': 3},
         }
 
         # self.send_file_alone(layout)
         self.set_head_assemb(layout[-1])
-        for _ in range(max(layout.keys())):
+        if -2 in layout.keys():
+            self.set_background_color()
+
+        for _ in range(max(layout.keys()) + 1):
             info = layout[_]
             info_key = list(info.keys())[0]
             info_v = info[info_key]
             if info_key == 'page':
                 self.set_page(info_v)
             if info_key == 'title':
-                self.set_page(info_v)
+                self.set_title(info_v)
             if info_key == 'content':
                 self.set_content(info_v)
             if info_key == 'follow_button':
                 self.set_follow_button(info_v)
+        time.sleep(100)
 
 
 if __name__ == '__main__':