create_ad_plan_idea.py 13 KB

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