|
@@ -5,6 +5,7 @@ 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 selenium.webdriver.common.keys import Keys
|
|
|
from wechat_action.login_ad import LogIn
|
|
|
from selenium.webdriver import ChromeOptions
|
|
|
|
|
@@ -15,17 +16,21 @@ import random
|
|
|
class SendAd():
|
|
|
# TODO:一旦登录之后,driver就不要关闭,然后错误就部分不断重试
|
|
|
|
|
|
-
|
|
|
- def __init__(self, task,login_ad):
|
|
|
+ def __init__(self, task, login_ad):
|
|
|
self.task = task
|
|
|
# self.task_check()
|
|
|
self.driver = login_ad.get_driver_loged()
|
|
|
- self.ad_idea_action = IdeaAction(self.driver,task)
|
|
|
+ self.ad_idea_action = IdeaAction(self.driver, task)
|
|
|
self.ad_human_action = HumanAd(self.driver)
|
|
|
|
|
|
+ def set_ad_title(self):
|
|
|
+ title_ = self.driver.find_element_by_xpath('//*[@class="input-2lFnByGCRh"]')
|
|
|
+ for i in range(40):
|
|
|
+ title_.send_keys(Keys.BACKSPACE)
|
|
|
+ title_.send_keys(self.task['title'])
|
|
|
+ title_.send_keys(Keys.RETURN)
|
|
|
|
|
|
-
|
|
|
- def select_ad_locations(self):
|
|
|
+ def set_ad_locations(self):
|
|
|
gg_button = self.driver.find_element_by_class_name(
|
|
|
'adui-button-hasLeftIcon')
|
|
|
gg_button.click()
|
|
@@ -50,10 +55,12 @@ class SendAd():
|
|
|
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()
|
|
|
- if localtion== 'gzh_big_pic':
|
|
|
- self.driver.find_element_by_xpath('//*[@id="wxadcontainer"]/div[1]/div/div[2]/main/div/div[3]/div[3]/div[1]/div/button').click()
|
|
|
+ if localtion == 'gzh_big_pic':
|
|
|
+ self.driver.find_element_by_xpath(
|
|
|
+ '//*[@id="wxadcontainer"]/div[1]/div/div[2]/main/div/div[3]/div[3]/div[1]/div/button').click()
|
|
|
time.sleep(0.5)
|
|
|
- self.driver.find_element_by_xpath('//*[@id="wxadcontainer"]/div[1]/div/div[2]/main/div/div[3]/div[3]/div[3]/ol/li[2]').click()
|
|
|
+ self.driver.find_element_by_xpath(
|
|
|
+ '//*[@id="wxadcontainer"]/div[1]/div/div[2]/main/div/div[3]/div[3]/div[3]/ol/li[2]').click()
|
|
|
time.sleep(random.uniform(0.1, 0.3))
|
|
|
|
|
|
# 花销设置
|
|
@@ -64,9 +71,33 @@ class SendAd():
|
|
|
next_button = self.driver.find_element_by_css_selector('#plan_next_step')
|
|
|
next_button.click()
|
|
|
|
|
|
- def set_ad_cost(self):
|
|
|
- # 投放计划创建
|
|
|
- # 广告创建
|
|
|
+ def set_ad_time(self):
|
|
|
+ WebDriverWait(self.driver, 10).until(
|
|
|
+ lambda driver: self.driver.find_elements_by_xpath('//*[@class="adui-input-base"]'))
|
|
|
+ input_elements = self.driver.find_elements_by_xpath('//*[@class="adui-input-base"]')
|
|
|
+ input_elements[0].click()
|
|
|
+ input_elements[0].send_keys(Keys.RIGHT)
|
|
|
+
|
|
|
+ for i in range(7):
|
|
|
+ time.sleep(random.uniform(0.1, 0.2))
|
|
|
+ input_elements[0].send_keys(Keys.BACKSPACE)
|
|
|
+ for _ in self.task['date_list'][0][1:]:
|
|
|
+ time.sleep(random.uniform(0.1, 0.2))
|
|
|
+ input_elements[0].send_keys(_)
|
|
|
+
|
|
|
+ time.sleep(random.uniform(0.1, 0.2))
|
|
|
+ input_elements[1].click()
|
|
|
+ time.sleep(0.1)
|
|
|
+ input_elements[1].send_keys(Keys.RIGHT)
|
|
|
+ for i in range(7):
|
|
|
+ time.sleep(random.uniform(0.1, 0.2))
|
|
|
+ input_elements[1].send_keys(Keys.BACKSPACE)
|
|
|
+ time.sleep(random.uniform(0.1, 0.2))
|
|
|
+ for _ in self.task['date_list'][1][1:]:
|
|
|
+ time.sleep(random.uniform(0.1, 0.2))
|
|
|
+ input_elements[1].send_keys(_)
|
|
|
+
|
|
|
+ def set_ad_human_location(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()
|
|
@@ -76,7 +107,7 @@ class SendAd():
|
|
|
citys = self.driver.find_elements_by_class_name('checkbox-1pfRMRqv-R')
|
|
|
for _ in citys:
|
|
|
_.click()
|
|
|
- if self.task['localtion']=='gzh_big_pic':
|
|
|
+ if self.task['localtion'] == 'gzh_big_pic':
|
|
|
self.driver.find_element_by_class_name('icon-3cAquX1RLZ').click()
|
|
|
self.driver.find_element_by_xpath('//*[@id="bid_objective_6"]/span[1]').click()
|
|
|
if self.task['localtion'] == 'pyq':
|
|
@@ -84,17 +115,46 @@ class SendAd():
|
|
|
for _ in citys:
|
|
|
_.click()
|
|
|
|
|
|
+ def set_ad_cost(self):
|
|
|
+ # 投放计划创建
|
|
|
+ # 广告创建
|
|
|
+
|
|
|
day_cost = self.driver.find_element_by_css_selector('#budget_input')
|
|
|
- #TODO: 投放时间,投放位置,投放价格还没有进行设置
|
|
|
- WebDriverWait(self.driver, 10).until(lambda x:(day_cost.is_displayed() and day_cost.is_enabled()))
|
|
|
+ WebDriverWait(self.driver, 10).until(lambda x: (day_cost.is_displayed() and day_cost.is_enabled()))
|
|
|
|
|
|
day_cost.send_keys('100')
|
|
|
self.driver.find_element_by_css_selector('#target_next_step').click()
|
|
|
|
|
|
def set_ad_human(self):
|
|
|
- #TODO:设置人群
|
|
|
- #TODO:检查人群是否正常
|
|
|
- pass
|
|
|
+ # TODO:检查人群是否正常
|
|
|
+ self.driver.find_element_by_xpath('//*[@id="test-dmp-container"]/div[2]/span/span[1]').click()
|
|
|
+ time.sleep(0.1)
|
|
|
+ select_human_element = self.driver.find_element_by_xpath(
|
|
|
+ '//*[@id="test-dmp-container"]/div[2]/div[2]/div[1]/div/div[1]/button/span')
|
|
|
+ ActionChains(self.driver).move_to_element(select_human_element).click().perform()
|
|
|
+ time.sleep(0.4)
|
|
|
+
|
|
|
+ WebDriverWait(self.driver, 100).until(
|
|
|
+ lambda x: [_ for _ in self.driver.find_elements_by_xpath('//*[@class="adui-input-base"]') if
|
|
|
+ _.get_attribute("placeholder") == '输入名称搜索人群包'])
|
|
|
+
|
|
|
+ human_input = [_ for _ in self.driver.find_elements_by_xpath('//*[@class="adui-input-base"]') if
|
|
|
+ _.get_attribute("placeholder") == '输入名称搜索人群包'][0]
|
|
|
+
|
|
|
+ for _ in self.task['human_info']:
|
|
|
+ human_input.click()
|
|
|
+ human_input.send_keys(_)
|
|
|
+ human_input.send_keys(Keys.RETURN)
|
|
|
+ time.sleep(random.uniform(0.5, 0.6))
|
|
|
+ human_names = self.driver.find_elements_by_xpath('//*[@class="adui-table-cellInner"]')
|
|
|
+ for human_name in human_names:
|
|
|
+ if human_name.text == _:
|
|
|
+ human_name.click()
|
|
|
+ for _ in range(len(_) + 1):
|
|
|
+ time.sleep(0.1)
|
|
|
+ human_input.send_keys(Keys.BACKSPACE)
|
|
|
+ self.driver.find_element_by_xpath(
|
|
|
+ '//*[@class="adui-button-base adui-button-primary adui-button-small"]').click()
|
|
|
|
|
|
def set_ad_idea(self):
|
|
|
# 创意创建
|
|
@@ -107,9 +167,8 @@ class SendAd():
|
|
|
if self.task['localtion'] == 'pyq':
|
|
|
self.ad_idea_action.idea_pyq()
|
|
|
|
|
|
-
|
|
|
next_button = self.driver.find_element_by_class_name('adui-button-primary')
|
|
|
- WebDriverWait(self.driver, 1000).until(lambda x:(next_button.is_displayed() and next_button.is_enabled()))
|
|
|
+ WebDriverWait(self.driver, 1000).until(lambda x: (next_button.is_displayed() and next_button.is_enabled()))
|
|
|
|
|
|
next_button.click()
|
|
|
|
|
@@ -127,11 +186,12 @@ class SendAd():
|
|
|
exit()
|
|
|
|
|
|
def run(self):
|
|
|
- # TODO:出错就截图,然后保存-----在最后一步截图,进行保存
|
|
|
- self.ad_human_action.check_human_info()
|
|
|
- self.select_ad_locations()
|
|
|
+ # self.ad_human_action.check_human_info()
|
|
|
+ self.set_ad_locations()
|
|
|
+ self.set_ad_time()
|
|
|
+ self.set_ad_title()
|
|
|
+ self.set_ad_human_location()
|
|
|
+ self.set_ad_human()
|
|
|
self.set_ad_cost()
|
|
|
self.set_ad_idea()
|
|
|
self.push_ad()
|
|
|
-
|
|
|
-
|