create_ad_plan_idea.py 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285
  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']['layout_name'])
  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']['layout_name']:
  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. '//*[@id="select_canvas_ok_btn"]'
  70. time.sleep(random.uniform(0.1, 0.2))
  71. def idea_pic_gzh_botoom(self):
  72. # 上传图片
  73. self.send_page()
  74. time.sleep(random.uniform(1, 2))
  75. # 信息栏类型
  76. idea_dic = self.task['idea']
  77. select_elements = self.driver.find_elements_by_xpath('//*[@class="label-2ZOAbuO31o"]')
  78. input_elements = self.driver.find_elements_by_xpath('//*[@class="input-3MbKvywHL2"]')
  79. # 信息栏
  80. if idea_dic['info_type'] == '1':
  81. # 头像
  82. for _ in select_elements:
  83. if _.text == '头像昵称型':
  84. _.click()
  85. if idea_dic['info_type'] == '2':
  86. # 文案
  87. for _ in select_elements:
  88. if _.text == '文案型':
  89. _.click()
  90. for _ in input_elements:
  91. # 信息栏文案
  92. if _.get_attribute("placeholder") == '信息栏文案':
  93. _.send_keys(idea_dic['info_type-content'])
  94. time.sleep(random.uniform(0.1, 0.2))
  95. self.push_promotion_page()
  96. def idea_banner_pic_gzh_botoom(self):
  97. WebDriverWait(self.driver, 10).until(
  98. lambda driver: self.driver.find_element_by_class_name('webuploader-element-invisible'))
  99. select_elements = self.driver.find_elements_by_xpath('//*[@class="label-2ZOAbuO31o"]')
  100. # 创意样式
  101. for _ in select_elements:
  102. if _.text == '图片式卡片':
  103. _.click()
  104. break
  105. # 上传图片
  106. self.send_page()
  107. time.sleep(random.uniform(0.5, 0.7))
  108. # 标签设置
  109. select_elements = self.driver.find_elements_by_xpath('//*[@class="label-2ZOAbuO31o"]')
  110. for _ in select_elements:
  111. if _.text == '转换目标量标签' and self.task['idea']['lable_type'] == 2:
  112. _.click()
  113. # 素材设置
  114. time.sleep(random.uniform(0.1, 0.2))
  115. self.push_promotion_page()
  116. def idea_banner_business_gzh_bottom(self):
  117. WebDriverWait(self.driver, 10).until(
  118. lambda driver: self.driver.find_element_by_xpath('//*[@id="test_material_type_135"]/span[2]'))
  119. self.driver.find_element_by_css_selector('#test_material_type_135 > span.inputWrapper-3fBModc9zM > i').click()
  120. wen_input = self.driver.find_element_by_class_name('input-3MbKvywHL2')
  121. wen_input.send_keys(self.task['idea']['idea_content'])
  122. time.sleep(random.uniform(0.2, 0.5))
  123. self.push_promotion_page()
  124. def idea_gzh_bottom(self):
  125. if self.task['idea']['idea_type'] == '1':
  126. self.idea_pic_gzh_botoom()
  127. if self.task['idea']['idea_type'] == '2':
  128. self.idea_banner_pic_gzh_botoom()
  129. if self.task['idea']['idea_type'] == '3':
  130. self.idea_banner_business_gzh_bottom()
  131. def idea_movie_gzh_movie(self):
  132. WebDriverWait(self.driver, 10).until(
  133. lambda driver: driver.find_element_by_class_name('webuploader-element-invisible'))
  134. self.driver.find_element_by_class_name('webuploader-element-invisible').send_keys(
  135. self.task['idea']['movie_path'])
  136. suc_button = self.driver.find_element_by_id('test_progress_confirm')
  137. WebDriverWait(self.driver, 1000).until(lambda x: (suc_button.is_displayed() and suc_button.is_enabled()))
  138. self.driver.find_element_by_id('test_progress_confirm').click()
  139. time.sleep(random.uniform(0.4, 0.6))
  140. self.push_promotion_page()
  141. time.sleep(random.uniform(0.4, 0.6))
  142. text_input = self.driver.find_element_by_css_selector('#reward_video_desc > div > input')
  143. text_input.send_keys(self.task['idea']['content'])
  144. select_elements = self.driver.find_elements_by_xpath('//*[@class="label-2ZOAbuO31o"]')
  145. for _ in select_elements:
  146. if _.text == '转化目标量标签' and self.task['idea']['lable_type'] == 2:
  147. _.click()
  148. def idea_big_pic(self):
  149. # 设置图片
  150. self.send_page()
  151. idea_dic = self.task['idea']
  152. select_elements = self.driver.find_elements_by_xpath('//*[@class="label-2ZOAbuO31o"]')
  153. input_elements = self.driver.find_elements_by_xpath('//*[@class="input-3MbKvywHL2"]')
  154. # 信息栏
  155. if idea_dic['info_type'] == '1':
  156. # 头像
  157. for _ in select_elements:
  158. if _.text == '头像昵称型':
  159. _.click()
  160. if idea_dic['info_type'] == '2':
  161. # 文案
  162. for _ in select_elements:
  163. if _.text == '文案型':
  164. _.click()
  165. for _ in input_elements:
  166. # 信息栏文案
  167. if _.get_attribute("placeholder") == '信息栏文案':
  168. _.send_keys(idea_dic['info_type-content'])
  169. time.sleep(random.uniform(0.1, 0.2))
  170. # 图文标题
  171. self.driver.find_element_by_xpath('//*[@id="test_first_line_input"]/div/input').send_keys(idea_dic['title'])
  172. time.sleep(random.uniform(0.1, 0.2))
  173. # 广告文案
  174. for _ in input_elements:
  175. if _.get_attribute("placeholder") == '请输入首行文案':
  176. _.send_keys(idea_dic['content_one'])
  177. time.sleep(random.uniform(0.1, 0.2))
  178. if _.get_attribute("placeholder") == '请输入次行文案':
  179. _.send_keys(idea_dic['content_two'])
  180. time.sleep(random.uniform(0.1, 0.2))
  181. if _.get_attribute("placeholder") == '请输入第三行文案(选填)':
  182. _.send_keys(idea_dic['content_three'])
  183. time.sleep(random.uniform(0.1, 0.2))
  184. # 标签展示
  185. for _ in select_elements:
  186. if _.text == '不启用' and idea_dic['lable_type'] == '1':
  187. _.click()
  188. if _.text == '好友关注量标签' and idea_dic['lable_type'] == '2':
  189. _.click()
  190. if _.text == '转化目标量标签' and idea_dic['lable_type'] == '3':
  191. _.click()
  192. time.sleep(random.uniform(0.1, 0.2))
  193. self.push_promotion_page()
  194. def idea_pyq(self):
  195. # TODO:添加idea_moudle,
  196. logging.info('朋友圈--文案设置')
  197. WebDriverWait(self.driver, 10).until(
  198. lambda driver: self.driver.find_element_by_xpath('//*[@class="ql-editor ql-blank"]'))
  199. self.driver.find_element_by_xpath(
  200. '//*[@class="ql-editor ql-blank"]'
  201. ).send_keys(self.task['idea']['content'])
  202. time.sleep(random.uniform(0.1, 0.5))
  203. # 朋友圈标题设置
  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'])
  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']['layout_name'])
  222. _.send_keys(Keys.RETURN)
  223. WebDriverWait(self.driver, 30).until(
  224. lambda driver: len(self.driver.find_elements_by_xpath('//*[@class="adui-table-cellInner"]')) == 5)
  225. # 搜索速度比较慢没有这么快
  226. time.sleep(1)
  227. WebDriverWait(self.driver, 30).until(
  228. lambda driver: [_ for _ in self.driver.find_elements_by_xpath('//*[@class="adui-table-cellInner"]') if
  229. _.is_displayed() and _.is_enabled() and _.text == self.task['idea']['jump_type_page_type'][
  230. 'layout_name']])
  231. time.sleep(random.uniform(0.5, 1))
  232. page_elements = self.driver.find_elements_by_xpath('//*[@class="adui-table-cellInner"]')
  233. for _ in page_elements:
  234. # 推广页的名字需要一模一样
  235. if _.text == self.task['idea']['jump_type_page_type']['layout_name']:
  236. _.click()
  237. time.sleep(random.uniform(0.1, 0.2))
  238. self.driver.find_element_by_xpath('//*[@id="select_canvas_ok_btn"]/span').click()
  239. time.sleep(random.uniform(0.1, 0.5))
  240. if self.task['idea']['data_show'] == '2':
  241. self.driver.find_element_by_xpath(
  242. '//*[@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()
  243. if self.task['idea']['data_show-type'] == '2':
  244. time.sleep(random.uniform(0.1, 0.5))
  245. WebDriverWait(self.driver, 100).until(lambda driver: self.driver.find_element_by_xpath(
  246. '//*[@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]'))
  247. self.driver.find_element_by_xpath(
  248. '//*[@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()