create_ad_plan_idea.py 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  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. for _ in select_elements:
  54. if _.get_attribute("placeholder") == '输入关键字搜索推广页':
  55. _.send_keys(idea_dic['jump_type-page_type'])
  56. _.send_keys(Keys.RETURN)
  57. WebDriverWait(self.driver, 30).until(
  58. lambda driver: self.driver.find_elements_by_xpath('//*[@class="adui-table-cellInner"]'))
  59. page_elements = self.driver.find_elements_by_xpath('//*[@class="adui-table-cellInner"]')
  60. for _ in page_elements:
  61. # 推广页的名字需要一模一样
  62. if _.text == idea_dic['jump_type-page_type']:
  63. _.click()
  64. time.sleep(random.uniform(0.1, 0.2))
  65. self.driver.find_element_by_xpath('//*[@id="select_canvas_ok_btn"]/span').click()
  66. '//*[@id="test_creative_next_step"]'
  67. time.sleep(random.uniform(0.1, 0.2))
  68. def idea_pic_gzh_botoom(self):
  69. # 上传图片
  70. self.send_page()
  71. time.sleep(random.uniform(1, 2))
  72. # 信息栏类型
  73. idea_dic = self.task['idea']
  74. select_elements = self.driver.find_elements_by_xpath('//*[@class="label-2ZOAbuO31o"]')
  75. input_elements = self.driver.find_elements_by_xpath('//*[@class="input-3MbKvywHL2"]')
  76. # 信息栏
  77. if idea_dic['info_type'] == 1:
  78. # 头像
  79. for _ in select_elements:
  80. if _.text == '头像昵称型':
  81. _.click()
  82. if idea_dic['info_type'] == 2:
  83. # 文案
  84. for _ in select_elements:
  85. if _.text == '文案型':
  86. _.click()
  87. for _ in input_elements:
  88. # 信息栏文案
  89. if _.get_attribute("placeholder") == '信息栏文案':
  90. _.send_keys(idea_dic['info_type-content'])
  91. time.sleep(random.uniform(0.1, 0.2))
  92. self.push_promotion_page()
  93. def idea_banner_pic_gzh_botoom(self):
  94. WebDriverWait(self.driver, 10).until(
  95. lambda driver: self.driver.find_element_by_class_name('webuploader-element-invisible'))
  96. select_elements = self.driver.find_elements_by_xpath('//*[@class="label-2ZOAbuO31o"]')
  97. # 创意样式
  98. for _ in select_elements:
  99. if _.text == '图片式卡片':
  100. _.click()
  101. break
  102. # 上传图片
  103. self.send_page()
  104. time.sleep(random.uniform(0.5, 0.7))
  105. # 标签设置
  106. select_elements = self.driver.find_elements_by_xpath('//*[@class="label-2ZOAbuO31o"]')
  107. for _ in select_elements:
  108. if _.text == '转换目标量标签' and self.task['idea']['lable_type'] == 2:
  109. _.click()
  110. # 素材设置
  111. time.sleep(random.uniform(0.1, 0.2))
  112. self.push_promotion_page()
  113. def idea_banner_business_gzh_bottom(self):
  114. WebDriverWait(self.driver, 10).until(
  115. lambda driver: self.driver.find_element_by_xpath('//*[@id="test_material_type_135"]/span[2]'))
  116. self.driver.find_element_by_css_selector('#test_material_type_135 > span.inputWrapper-3fBModc9zM > i').click()
  117. wen_input = self.driver.find_element_by_class_name('input-3MbKvywHL2')
  118. wen_input.send_keys(self.task['idea']['idea_content'])
  119. time.sleep(random.uniform(0.2, 0.5))
  120. self.push_promotion_page()
  121. def idea_gzh_bottom(self):
  122. if self.task['idea']['idea_type'] == 1:
  123. self.idea_pic_gzh_botoom()
  124. if self.task['idea']['idea_type'] == 2:
  125. self.idea_banner_pic_gzh_botoom()
  126. if self.task['idea']['idea_type'] == 3:
  127. self.idea_banner_business_gzh_bottom()
  128. def idea_movie_gzh_movie(self):
  129. WebDriverWait(self.driver, 10).until(
  130. lambda driver: driver.find_element_by_class_name('webuploader-element-invisible'))
  131. self.driver.find_element_by_class_name('webuploader-element-invisible').send_keys(
  132. self.task['idea']['movie_path'])
  133. suc_button = self.driver.find_element_by_id('test_progress_confirm')
  134. WebDriverWait(self.driver, 1000).until(lambda x: (suc_button.is_displayed() and suc_button.is_enabled()))
  135. self.driver.find_element_by_id('test_progress_confirm').click()
  136. time.sleep(random.uniform(0.4, 0.6))
  137. self.push_promotion_page()
  138. time.sleep(random.uniform(0.4, 0.6))
  139. text_input = self.driver.find_element_by_css_selector('#reward_video_desc > div > input')
  140. text_input.send_keys(self.task['idea']['content'])
  141. select_elements = self.driver.find_elements_by_xpath('//*[@class="label-2ZOAbuO31o"]')
  142. for _ in select_elements:
  143. if _.text == '转化目标量标签' and self.task['idea']['lable_type'] == 2:
  144. _.click()
  145. def idea_big_pic(self):
  146. # 设置图片
  147. self.send_page()
  148. idea_dic = self.task['idea']
  149. select_elements = self.driver.find_elements_by_xpath('//*[@class="label-2ZOAbuO31o"]')
  150. input_elements = self.driver.find_elements_by_xpath('//*[@class="input-3MbKvywHL2"]')
  151. # 信息栏
  152. if idea_dic['info_type'] == 1:
  153. # 头像
  154. for _ in select_elements:
  155. if _.text == '头像昵称型':
  156. _.click()
  157. if idea_dic['info_type'] == 2:
  158. # 文案
  159. for _ in select_elements:
  160. if _.text == '文案型':
  161. _.click()
  162. for _ in input_elements:
  163. # 信息栏文案
  164. if _.get_attribute("placeholder") == '信息栏文案':
  165. _.send_keys(idea_dic['info_type-content'])
  166. time.sleep(random.uniform(0.1, 0.2))
  167. # 图文标题
  168. self.driver.find_element_by_xpath('//*[@id="test_first_line_input"]/div/input').send_keys(idea_dic['title'])
  169. time.sleep(random.uniform(0.1, 0.2))
  170. # 广告文案
  171. for _ in input_elements:
  172. if _.get_attribute("placeholder") == '请输入首行文案':
  173. _.send_keys(idea_dic['content_one'])
  174. time.sleep(random.uniform(0.1, 0.2))
  175. if _.get_attribute("placeholder") == '请输入次行文案':
  176. _.send_keys(idea_dic['content_two'])
  177. time.sleep(random.uniform(0.1, 0.2))
  178. if _.get_attribute("placeholder") == '请输入第三行文案(选填)':
  179. _.send_keys(idea_dic['content_three'])
  180. time.sleep(random.uniform(0.1, 0.2))
  181. # 标签展示
  182. for _ in select_elements:
  183. if _.text == '不启用' and idea_dic['lable_type'] == 1:
  184. _.click()
  185. if _.text == '好友关注量标签' and idea_dic['lable_type'] == 2:
  186. _.click()
  187. if _.text == '转化目标量标签' and idea_dic['lable_type'] == 3:
  188. _.click()
  189. time.sleep(random.uniform(0.1, 0.2))
  190. self.push_promotion_page()
  191. def idea_pyq(self):
  192. #TODO: 选择相关落地页
  193. print(self.driver.current_url)
  194. '//*[@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'
  195. WebDriverWait(self.driver, 100).until(
  196. lambda driver: self.driver.find_element_by_xpath('//*[@class="ql-editor ql-blank"]'))
  197. self.driver.find_element_by_xpath(
  198. '//*[@class="ql-editor ql-blank"]'
  199. ).send_keys(self.task['idea']['content'])
  200. time.sleep(random.uniform(0.1, 0.5))
  201. self.push_promotion_page()
  202. time.sleep(random.uniform(0.1, 0.5))
  203. if self.task['idea']['data_show'] == 2:
  204. self.driver.find_element_by_xpath(
  205. '//*[@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()
  206. if self.task['idea']['data_show-type'] == 2:
  207. time.sleep(random.uniform(0.1, 0.5))
  208. WebDriverWait(self.driver, 100).until(lambda driver: self.driver.find_element_by_xpath(
  209. '//*[@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]'))
  210. self.driver.find_element_by_xpath(
  211. '//*[@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()