from selenium import webdriver from selenium.webdriver import ActionChains from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.wait import WebDriverWait from wechat_action.send_ad_idea import IdeaAction from wechat_action.human_ad import HumanAd from wechat_action.login_ad import LogIn from selenium.webdriver import ChromeOptions import time import random class SendAd(): # TODO:一旦登录之后,driver就不要关闭,然后错误就部分不断重试 def __init__(self, task): self.task = task self.task_check() self.driver = LogIn().get_driver_loged() self.ad_idea_action = IdeaAction(self.driver) self.ad_human_action = HumanAd(self.driver) def select_ad_locations(self): gg_button = self.driver.find_element_by_class_name( 'adui-button-hasLeftIcon') gg_button.click() # 设置广告形式 self.driver.switch_to.window(self.driver.window_handles[-1]) self.driver.execute_script(''' window.scroll(100000,0); ''') WebDriverWait(self.driver, 10).until( lambda driver: self.driver.find_element_by_css_selector('#PRODUCTTYPE_WECHAT')) # 推广公众号 wechat_gg = self.driver.find_element_by_css_selector('#PRODUCTTYPE_WECHAT') wechat_gg.click() localtion = self.task['localtion'] if localtion == 'gzh_bottom': # 默认是这个选项,所以不用进行点选 pass if localtion == 'gzh_movie': wechat_localtion = self.driver.find_element_by_id('pos_8') wechat_localtion.click() if localtion == 'pyq': wechat_localtion = self.driver.find_element_by_css_selector( '#wxadcontainer > div:nth-child(1) > div > div.content-2-HFBij0Uh > main > div > div:nth-child(3) > div.adui-grid-row > div:nth-child(1)') wechat_localtion.click() time.sleep(random.uniform(0.1, 0.3)) # 花销设置 # cost_input = self.driver.find_element_by_css_selector( # '#wxadcontainer > div:nth-child(1) > div > div.content-2-HFBij0Uh > main > div > div:nth-child(5) > div:nth-child(2) > div:nth-child(1) > div > input') # cost_input.send_keys('100') # 进入下一页 next_button = self.driver.find_element_by_css_selector('#plan_next_step') next_button.click() self.driver.save_screenshot('set_page_localtion.png') def set_ad_cost(self): # 投放计划创建 # 广告创建 WebDriverWait(self.driver, 10).until( lambda driver: self.driver.find_element_by_css_selector('#area_input > div > i')) self.driver.find_element_by_css_selector('#area_input > div > i').click() if self.task['localtion'] == 'gzh_botoom': self.driver.find_element_by_class_name('icon-3cAquX1RLZ').click() if self.task['localtion'] == 'gzh_movie': citys = self.driver.find_elements_by_class_name('checkbox-1pfRMRqv-R') for _ in citys: _.click() if self.task['localtion'] == 'pyq': pass day_cost = self.driver.find_element_by_css_selector('#budget_input') day_cost.send_keys('100') self.driver.save_screenshot('set_page_cost.png') self.driver.find_element_by_css_selector('#target_next_step').click() def set_ad_human(self): #TODO:设置人群 pass def set_ad_idea(self): # TODO:创意创建这部分切割开 # 创意创建 if self.task['localtion'] == 'gzh_bottom': self.ad_idea_action.idea_pic_gzh_bottom() if self.task['localtion'] == 'gzh_movie': self.ad_idea_action.idea_movie_gzh_movie() if self.task['localtion'] == 'pyq': pass next_button = self.driver.find_element_by_class_name('adui-button-primary') next_button.click() def push_ad(self): # 提交 time.sleep(random.uniform(3, 4)) self.driver.find_element_by_class_name('icon-3cAquX1RLZ').click() time.sleep(random.uniform(0.5, 1)) self.driver.save_screenshot('push_page.png') self.driver.find_element_by_class_name('adui-button-primary').click() def task_check(self): # TODO:检查任务有无输入问题, if 'master' not in self.task.keys() or 'localtion' not in self.task.keys(): exit() def run(self): # TODO:出错就截图,然后保存 self.ad_human_action.check_human_info() self.select_ad_locations() self.set_ad_cost() self.set_ad_idea() self.push_ad() if __name__ == '__main__': task = {'master': '', 'localtion': 'gzh_movie'} SendAd(task).run()