create_ad_plan_idea.py 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284
  1. import time
  2. import random
  3. from selenium.webdriver.common.keys import Keys
  4. from selenium.webdriver.support.wait import WebDriverWait
  5. import logging
  6. class IdeaAction:
  7. def __init__(self, driver, task):
  8. self.driver = driver
  9. self.task = task
  10. def send_page(self):
  11. WebDriverWait(self.driver, 10).until(
  12. lambda driver: self.driver.find_element_by_class_name('webuploader-element-invisible'))
  13. page_input = self.driver.find_element_by_class_name('webuploader-element-invisible')
  14. page_input.send_keys(self.task['idea']['page_path'])
  15. try:
  16. WebDriverWait(self.driver, 100).until(lambda driver: driver.find_element_by_xpath(
  17. '//*[@id="wxadcontainer"]/div[1]/div/div[2]/main/div/div[2]/div[2]/div/div[1]/div[1]/div[2]/div/form/div[2]/div/div[1]/div/div[1]/div/div/div/div/div/div[2]/section/div/div[2]/button[1]'))
  18. self.driver.find_element_by_xpath(
  19. '//*[@id="wxadcontainer"]/div[1]/div/div[2]/main/div/div[2]/div[2]/div/div[1]/div[1]/div[2]/div/form/div[2]/div/div[1]/div/div[1]/div/div/div/div/div/div[2]/section/div/div[2]/button[1]').click()
  20. WebDriverWait(self.driver, 100).until(
  21. lambda driver: self.driver.find_element_by_xpath('//*[@id="test_progress_confirm"]'))
  22. suc_button = self.driver.find_element_by_xpath('//*[@id="test_progress_confirm"]')
  23. WebDriverWait(self.driver, 100).until(lambda driver: suc_button.is_displayed() and suc_button.is_enabled())
  24. suc_button.click()
  25. except:
  26. pass
  27. def push_promotion_page(self):
  28. # TODO:对于朋友圈需要整体新建一个-----问题挺多
  29. idea_dic = self.task['idea']
  30. select_elements = self.driver.find_elements_by_xpath('//*[@class="label-2ZOAbuO31o"]')
  31. # 点击跳转
  32. for _ in select_elements:
  33. if _.text == '公众号详情页' and idea_dic['jump_type'] == 2:
  34. _.click()
  35. time.sleep(random.uniform(0.1, 0.2))
  36. # 按钮文案
  37. for _ in select_elements:
  38. if _.text == '立即咨询' and idea_dic['button_type'] == 2:
  39. _.click()
  40. if _.text == '立即申请' and idea_dic['button_type'] == 3:
  41. _.click()
  42. if _.text == '阅读小说' and idea_dic['button_type'] == 4:
  43. _.click()
  44. time.sleep(random.uniform(0.1, 0.2))
  45. if idea_dic['jump_type'] == 1:
  46. # 点击按钮跳转
  47. for _ in select_elements:
  48. if _.text == '一键关注' and idea_dic['jump_type_button_type'] == 2:
  49. _.click()
  50. time.sleep(random.uniform(0.1, 0.2))
  51. # 原生推广页选择
  52. self.driver.find_element_by_xpath('//*[@id="choose_template"]').click()
  53. select_elements = self.driver.find_elements_by_xpath('//*[@class="inputWrapper-3fBModc9zM"]')
  54. input_elements = self.driver.find_element_by_xpath('//*[@class="adui-input-base"]')
  55. for _ in input_elements:
  56. if _.get_attribute("placeholder") == '输入关键字搜索推广页':
  57. _.send_keys(idea_dic['jump_type_page_type'])
  58. _.send_keys(Keys.RETURN)
  59. WebDriverWait(self.driver, 30).until(
  60. lambda driver: self.driver.find_elements_by_xpath('//*[@class="adui-table-cellInner"]'))
  61. page_elements = self.driver.find_elements_by_xpath('//*[@class="adui-table-cellInner"]')
  62. for _ in page_elements:
  63. # 推广页的名字需要一模一样
  64. if _.text == idea_dic['jump_type_page_type']:
  65. _.click()
  66. time.sleep(random.uniform(0.1, 0.2))
  67. self.driver.find_element_by_xpath('//*[@id="select_canvas_ok_btn"]/span').click()
  68. '//*[@id="test_creative_next_step"]'
  69. time.sleep(random.uniform(0.1, 0.2))
  70. def idea_pic_gzh_botoom(self):
  71. # 上传图片
  72. self.send_page()
  73. time.sleep(random.uniform(1, 2))
  74. # 信息栏类型
  75. idea_dic = self.task['idea']
  76. select_elements = self.driver.find_elements_by_xpath('//*[@class="label-2ZOAbuO31o"]')
  77. input_elements = self.driver.find_elements_by_xpath('//*[@class="input-3MbKvywHL2"]')
  78. # 信息栏
  79. if idea_dic['info_type'] == 1:
  80. # 头像
  81. for _ in select_elements:
  82. if _.text == '头像昵称型':
  83. _.click()
  84. if idea_dic['info_type'] == 2:
  85. # 文案
  86. for _ in select_elements:
  87. if _.text == '文案型':
  88. _.click()
  89. for _ in input_elements:
  90. # 信息栏文案
  91. if _.get_attribute("placeholder") == '信息栏文案':
  92. _.send_keys(idea_dic['info_type-content'])
  93. time.sleep(random.uniform(0.1, 0.2))
  94. self.push_promotion_page()
  95. def idea_banner_pic_gzh_botoom(self):
  96. WebDriverWait(self.driver, 10).until(
  97. lambda driver: self.driver.find_element_by_class_name('webuploader-element-invisible'))
  98. select_elements = self.driver.find_elements_by_xpath('//*[@class="label-2ZOAbuO31o"]')
  99. # 创意样式
  100. for _ in select_elements:
  101. if _.text == '图片式卡片':
  102. _.click()
  103. break
  104. # 上传图片
  105. self.send_page()
  106. time.sleep(random.uniform(0.5, 0.7))
  107. # 标签设置
  108. select_elements = self.driver.find_elements_by_xpath('//*[@class="label-2ZOAbuO31o"]')
  109. for _ in select_elements:
  110. if _.text == '转换目标量标签' and self.task['idea']['lable_type'] == 2:
  111. _.click()
  112. # 素材设置
  113. time.sleep(random.uniform(0.1, 0.2))
  114. self.push_promotion_page()
  115. def idea_banner_business_gzh_bottom(self):
  116. WebDriverWait(self.driver, 10).until(
  117. lambda driver: self.driver.find_element_by_xpath('//*[@id="test_material_type_135"]/span[2]'))
  118. self.driver.find_element_by_css_selector('#test_material_type_135 > span.inputWrapper-3fBModc9zM > i').click()
  119. wen_input = self.driver.find_element_by_class_name('input-3MbKvywHL2')
  120. wen_input.send_keys(self.task['idea']['idea_content'])
  121. time.sleep(random.uniform(0.2, 0.5))
  122. self.push_promotion_page()
  123. def idea_gzh_bottom(self):
  124. if self.task['idea']['idea_type'] == 1:
  125. self.idea_pic_gzh_botoom()
  126. if self.task['idea']['idea_type'] == 2:
  127. self.idea_banner_pic_gzh_botoom()
  128. if self.task['idea']['idea_type'] == 3:
  129. self.idea_banner_business_gzh_bottom()
  130. def idea_movie_gzh_movie(self):
  131. WebDriverWait(self.driver, 10).until(
  132. lambda driver: driver.find_element_by_class_name('webuploader-element-invisible'))
  133. self.driver.find_element_by_class_name('webuploader-element-invisible').send_keys(
  134. self.task['idea']['movie_path'])
  135. suc_button = self.driver.find_element_by_id('test_progress_confirm')
  136. WebDriverWait(self.driver, 1000).until(lambda x: (suc_button.is_displayed() and suc_button.is_enabled()))
  137. self.driver.find_element_by_id('test_progress_confirm').click()
  138. time.sleep(random.uniform(0.4, 0.6))
  139. self.push_promotion_page()
  140. time.sleep(random.uniform(0.4, 0.6))
  141. text_input = self.driver.find_element_by_css_selector('#reward_video_desc > div > input')
  142. text_input.send_keys(self.task['idea']['content'])
  143. select_elements = self.driver.find_elements_by_xpath('//*[@class="label-2ZOAbuO31o"]')
  144. for _ in select_elements:
  145. if _.text == '转化目标量标签' and self.task['idea']['lable_type'] == 2:
  146. _.click()
  147. def idea_big_pic(self):
  148. # 设置图片
  149. self.send_page()
  150. idea_dic = self.task['idea']
  151. select_elements = self.driver.find_elements_by_xpath('//*[@class="label-2ZOAbuO31o"]')
  152. input_elements = self.driver.find_elements_by_xpath('//*[@class="input-3MbKvywHL2"]')
  153. # 信息栏
  154. if idea_dic['info_type'] == 1:
  155. # 头像
  156. for _ in select_elements:
  157. if _.text == '头像昵称型':
  158. _.click()
  159. if idea_dic['info_type'] == 2:
  160. # 文案
  161. for _ in select_elements:
  162. if _.text == '文案型':
  163. _.click()
  164. for _ in input_elements:
  165. # 信息栏文案
  166. if _.get_attribute("placeholder") == '信息栏文案':
  167. _.send_keys(idea_dic['info_type-content'])
  168. time.sleep(random.uniform(0.1, 0.2))
  169. # 图文标题
  170. self.driver.find_element_by_xpath('//*[@id="test_first_line_input"]/div/input').send_keys(idea_dic['title'])
  171. time.sleep(random.uniform(0.1, 0.2))
  172. # 广告文案
  173. for _ in input_elements:
  174. if _.get_attribute("placeholder") == '请输入首行文案':
  175. _.send_keys(idea_dic['content_one'])
  176. time.sleep(random.uniform(0.1, 0.2))
  177. if _.get_attribute("placeholder") == '请输入次行文案':
  178. _.send_keys(idea_dic['content_two'])
  179. time.sleep(random.uniform(0.1, 0.2))
  180. if _.get_attribute("placeholder") == '请输入第三行文案(选填)':
  181. _.send_keys(idea_dic['content_three'])
  182. time.sleep(random.uniform(0.1, 0.2))
  183. # 标签展示
  184. for _ in select_elements:
  185. if _.text == '不启用' and idea_dic['lable_type'] == 1:
  186. _.click()
  187. if _.text == '好友关注量标签' and idea_dic['lable_type'] == 2:
  188. _.click()
  189. if _.text == '转化目标量标签' and idea_dic['lable_type'] == 3:
  190. _.click()
  191. time.sleep(random.uniform(0.1, 0.2))
  192. self.push_promotion_page()
  193. def idea_pyq(self):
  194. # TODO:添加idea_moudle,
  195. logging.info('朋友圈--文案设置')
  196. WebDriverWait(self.driver, 100).until(
  197. lambda driver: self.driver.find_element_by_xpath('//*[@class="ql-editor ql-blank"]'))
  198. self.driver.find_element_by_xpath(
  199. '//*[@class="ql-editor ql-blank"]'
  200. ).send_keys(self.task['idea']['content'])
  201. time.sleep(random.uniform(0.1, 0.5))
  202. # 朋友圈标题设置
  203. #TODO:各处的标题需要进行对应设置----------导致结果数据库里的标题与微信标题不相同
  204. for i in range(40):
  205. self.driver.find_element_by_xpath('//*[@class="input-2lFnByGCRh"]').send_keys(Keys.BACKSPACE)
  206. self.driver.find_element_by_xpath('//*[@class="input-2lFnByGCRh"]').send_keys(
  207. self.task['idea']['name'].replace(' ', '')[:29])
  208. # 朋友圈其他设置
  209. select_elements = self.driver.find_elements_by_xpath('//*[@class="label-2ZOAbuO31o"]')
  210. for _ in select_elements:
  211. if _.text == '了解更多' and self.task['idea']['jump_type_text_type'] == 2:
  212. _.click()
  213. if _.text == '原生推广页' and self.task['idea']['jump_type_link_type'] == 2:
  214. _.click()
  215. # 朋友圈推广页选择
  216. logging.info('朋友圈--推广页设置')
  217. self.driver.find_element_by_xpath('//*[@id="choose_template"]').click()
  218. input_elements = self.driver.find_elements_by_xpath('//*[@class="adui-input-base"]')
  219. for _ in input_elements:
  220. if _.get_attribute("placeholder") == '输入关键字搜索推广页':
  221. _.send_keys(self.task['idea']['jump_type_page_type'])
  222. _.send_keys(Keys.RETURN)
  223. # TODO:有空去除这个时间,使用等待
  224. time.sleep(random.uniform(0.5, 1))
  225. WebDriverWait(self.driver, 30).until(
  226. lambda driver: self.driver.find_elements_by_xpath('//*[@class="adui-table-cellInner"]'))
  227. page_elements = self.driver.find_elements_by_xpath('//*[@class="adui-table-cellInner"]')
  228. for _ in page_elements:
  229. # 推广页的名字需要一模一样
  230. if _.text == self.task['idea']['jump_type_page_type']:
  231. _.click()
  232. time.sleep(random.uniform(0.1, 0.2))
  233. self.driver.find_element_by_xpath('//*[@id="select_canvas_ok_btn"]/span').click()
  234. '//*[@id="test_creative_next_step"]'
  235. time.sleep(random.uniform(0.1, 0.2))
  236. time.sleep(random.uniform(0.1, 0.5))
  237. if self.task['idea']['data_show'] == 2:
  238. self.driver.find_element_by_xpath(
  239. '//*[@id="wxadcontainer"]/div[1]/div/div[2]/main/div/div[2]/div[2]/div/div[1]/div[1]/div[2]/form/div[5]/div[1]/div/span/span[1]').click()
  240. if self.task['idea']['data_show-type'] == 2:
  241. time.sleep(random.uniform(0.1, 0.5))
  242. WebDriverWait(self.driver, 100).until(lambda driver: self.driver.find_element_by_xpath(
  243. '//*[@id="wxadcontainer"]/div[1]/div/div[2]/main/div/div[2]/div[2]/div/div[1]/div[1]/div[2]/form/div[5]/div[2]/div/div[1]/label/span[1]'))
  244. self.driver.find_element_by_xpath(
  245. '//*[@id="wxadcontainer"]/div[1]/div/div[2]/main/div/div[2]/div[2]/div/div[1]/div[1]/div[2]/form/div[5]/div[2]/div/div[1]/label/span[1]').click()