#!/usr/bin/python3
# -- coding: UTF-8 --
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import ElementClickInterceptedException
import time
import xlrd
import xlwings as xw
import pyautogui
import csv
options = webdriver.ChromeOptions()
# 此步骤很重要,设置为开发者模式,防止被各大网站识别出来使用了Selenium
options.add_experimental_option('excludeSwitches', ['enable-automation'])
options.add_argument('--ignore-certificate-errors')
driver = webdriver.Chrome(options=options)
options = webdriver.ChromeOptions()
chains = ActionChains(driver)
driver.set_window_size(1500, 1000)
login_url = "https://gsp.lazada-seller.cn/page/login"
# 判断语句
def isElementExist(self): # xpath
# print(self)
flag = True
# print(flag)
try:
driver.find_element_by_xpath(self)
# print(driver.find_element_by_css_selector(self))
return flag
except:
flag = False
return flag
def id_exist(self):
# print(self)
flag = True
# print(flag)
try:
driver.find_element_by_id(self)
# print(driver.find_element_by_css_selector(self))
return flag
except:
flag = False
return flag
def try_login(username, password):
# 找到用户名输入框,输入账号
login_name = driver.find_element_by_id("fm-login-id")
# 输入账号
login_name.send_keys(username)
time.sleep(4)
# 找到密码输入框,输入密码
login_password = driver.find_element_by_id("fm-login-password")
# 输入密码
login_password.send_keys(password)
# 找到登陆框
login_button_1 = driver.find_element_by_id("fm-login-submit")
time.sleep(2)
# 通过链的方式模拟登陆
login_button_1.click()
time.sleep(3)
# 刷新一下
driver.refresh()
time.sleep(2)
# 找到活动页
def try_promotions():
chains.move_to_element(driver.find_element_by_xpath("//*[contains(text(),'Promotions')]")).perform()
time.sleep(2)
# 有时候点击不了
flag = isElementExist(
"//div[2]/ul/li[7]/div/span/div/a")
if flag:
driver.find_element_by_xpath(
"//div[2]/ul/li[7]/div/span/div/a").click() # 推广中心
time.sleep(2)
print('推广页已跳转')
else:
driver.refresh()
time.sleep(2)
print('推广页未找到')
def x_exist():
time.sleep(2)
# flag = isElementExist("//div[@class='guide-item ']/span[1]")
Close = isElementExist("//*[@id='product-ads']/div[3]/div[2]/a/i")
Dialog = isElementExist("//*[@id='dialog-tc-no-auth']/div/div[2]/div[1]/div/div[2]/label/span/input")
if Close:
time.sleep(3)
# print('第一个x键已找到')
driver.find_element_by_xpath("//*[@id='product-ads']/div[3]/div[2]/a/i").click() # 活动中心
time.sleep(2)
return
elif Dialog:
driver.find_element_by_xpath("//*[@id='dialog-tc-no-auth']/div/div[2]/div[1]/div/div[2]/label/span/input").click() # 活动中心
time.sleep(2)
driver.find_element_by_xpath("//*[@id='dialog-tc-no-auth']/div/div[2]/div[2]/button/span").click() # 活动中心
time.sleep(2)
return
else:
# j += j
time.sleep(5)
# driver.refresh()
print('没有其他窗口')
return
def alert():
Save = isElementExist("//button[contains(text(),'Save')]")
Accept = isElementExist("//button[contains(text(),'Accept')]")
Agree = isElementExist("//button[contains(text(),'Agree')]")
if Save:
driver.find_element_by_xpath("//button[contains(text(),'Save')]").click() #
time.sleep(2)
return
elif Accept:
driver.find_element_by_xpath("//button[contains(text(),'Accept')]").click() #
time.sleep(2)
return
elif Agree:
driver.find_element_by_xpath("//button[contains(text(),'Agree')]").click() #
time.sleep(2)
return
else:
return
def zan():
time.sleep(0.5) # 等待 0.5 秒
left, top, width, height = pyautogui.locateOnScreen('desktop.png') # 寻找 点赞图片;
center = pyautogui.center((left, top, width, height)) # 寻找 图片的中心
pyautogui.doubleClick(center) # 点击
# print('点赞成功!')
def export_excel():
# 用excel表格
chains.move_to_element(driver.find_element_by_xpath("//button[contains(text(),'Submit by Excel')]")).perform()
time.sleep(2)
# Export Excel
driver.find_element_by_xpath("//*[contains(text(),'Export Excel')]").click() #
time.sleep(25)
# download########等待下载时间
flag = isElementExist("//a[contains(text(),'Download')]/i")
for k in range(1, 10):
if flag:
print('有可以下载了的')
break
else:
time.sleep(60)
print('耐心等待下载中')
flag = isElementExist("//a[contains(text(),'Download')]/i")
if flag:
download = driver.find_element_by_xpath("//a[contains(text(),'Download')]/i") #
rightClick = ActionChains(driver) # 实例化ActionChains类
rightClick.context_click(download).perform() # context_click(logo)在logo上执行右键操作,perform()是一个执行动作
time.sleep(2)
pyautogui.typewrite(['down', 'down', 'down', 'down']) # 选中右键菜单中第2个选项 # 这个记得在浏览器里面?
time.sleep(2)
pyautogui.typewrite(['enter']) # 最后一个按键: mac电脑用的return,Windows应用enter
time.sleep(2)
pyautogui.click(x=285, y=567, button='left')
time.sleep(1)
pyautogui.keyDown('ctrl')
time.sleep(2)
pyautogui.keyDown('a')
time.sleep(2)
pyautogui.keyUp('ctrl')
time.sleep(2)
pyautogui.keyUp('a')
time.sleep(2)
pyautogui.press('backspace')
time.sleep(1)
pyautogui.click(x=285, y=567, button='left')
time.sleep(2)
pyautogui.typewrite('test.xlsx', interval=0.25)
time.sleep(2)
pyautogui.press('enter') # 按下并松开(轻敲)回车键
time.sleep(2)
pyautogui.press('enter') # 按下并松开(轻敲)回车键
time.sleep(1)
pyautogui.press('left') # 按下并松开(轻敲)回车键
time.sleep(2)
pyautogui.press('enter') # 按下并松开(轻敲)回车键
time.sleep(10)
print("表格下载完成")
###导入表格处理######
else:
print('等待时间过长,需要纯点击版')
return
app = xw.App(visible=True, add_book=False)
app.display_alerts = False
app.screen_updating = True # excel 是否展示内容
test = r'C:\Users\Administrator\Downloads\test.xlsx'
promotion = r'C:\Users\Administrator\Desktop\promotion.xlsm'
wb_promotion = app.books.open(promotion)
time.sleep(3)
wb_test = app.books.open(test)
wb_test.activate(steal_focus=True)
time.sleep(10)
pyautogui.hotkey('ctrl', 'q')
time.sleep(10)
wb_promotion.close()
app.quit()
print("VBA执行完成")
time.sleep(5)
####导入表格####
driver.find_element_by_xpath(
"//*[@data-spm='importexcel']").click() #
time.sleep(2)
driver.find_element_by_xpath("//*[@class='block']").click() # +号提交
time.sleep(3)
# 105 169# 点击桌面
if pyautogui.locateOnScreen('desktop.png'):
zan() # 调用点赞函数
else:
print('没有找到目标')
time.sleep(3)
'''
pyautogui.moveTo(x=285, y=567, duration=0.5)
pyautogui.click(button='left') #
time.sleep(3)
'''
# 256 642 #点击输入框 活动报名xlsx
pyautogui.click(x=256, y=642, button='left')
time.sleep(1)
pyautogui.typewrite('promotionimport.xlsx', interval=0.25)
time.sleep(5)
pyautogui.press('enter') # 按下并松开(轻敲)回车键
time.sleep(2)
pyautogui.press('enter') # 按下并松开(轻敲)回车键
time.sleep(2)
for handle in driver.window_handles:
# 先切换到该窗口
driver.switch_to.window(handle)
# 得到该窗口的标题栏字符串,判断是不是我们要操作的那个窗口
if 'Lazada Cross Bordaer' in driver.title:
# 如果是,那么这时候WebDriver对象就是对应的该该窗口,正好,跳出循环,
break
driver.close()
time.sleep(2)
for handle in driver.window_handles:
# 先切换到该窗口
driver.switch_to.window(handle)
# 得到该窗口的标题栏字符串,判断是不是我们要操作的那个窗口
if 'Seller Center' in driver.title:
# 如果是,那么这时候WebDriver对象就是对应的该该窗口,正好,跳出循环,
break
try:
driver.find_element_by_xpath("//button[contains(text(),'Ok')]").click() # 提交
time.sleep(10)
except NoSuchElementException:
return
time.sleep(2)
def MY_promotion(username):
time.sleep(5)
##点击推广详情
try:
driver.find_element_by_xpath("//*[@id='product-ads']/div[2]/div[3]/div/div[2]/div/div/div/div[6]/div/div[2]/section/div/div[2]/div[3]/div[2]/div[2]/table/tbody/tr/td[2]/div/div/div/div/div[1]/a").click()
time.sleep(2)
except NoSuchElementException:
return
#点击时间轴
try:
driver.find_element_by_xpath(
"//div[2]/span/input").click()
time.sleep(5)
except NoSuchElementException:
return
# 点击过去30天 7月1号 -7月 31号
try:
#向上一个月
driver.find_element_by_xpath("//*[@id='product-ads']/div[4]/div/div/div/div/div[1]/div[1]/div[2]/div[1]/div/a[2]").click()
time.sleep(2)
driver.find_element_by_xpath("//*[@id='product-ads']/div[4]/div/div/div/div/div[1]/div[1]/div[2]/div[2]/table/tbody/tr[1]/td[6]/div").click()
time.sleep(2)
driver.find_element_by_xpath("//*[@id='product-ads']/div[4]/div/div/div/div/div[1]/div[1]/div[2]/div[2]/table/tbody/tr[6]/td[1]/div").click()
time.sleep(2)
except NoSuchElementException:
return
spend = driver.find_elements_by_xpath("//*[@id='product-ads']/div[2]/div[2]/div[3]/div/div[2]/div[1]/div[2]/div/span[2]")
Impressions = driver.find_elements_by_xpath("//*[@id='product-ads']/div[2]/div[2]/div[3]/div/div[2]/div[2]/div[2]/div/span[2]")
Clicks = driver.find_elements_by_xpath(
"//*[@id='product-ads']/div[2]/div[2]/div[3]/div/div[2]/div[3]/div[2]/div/span[2]")
CTR = driver.find_elements_by_xpath(
"//*[@id='product-ads']/div[2]/div[2]/div[3]/div/div[2]/div[4]/div[2]/div/span[1]")
CPC = driver.find_elements_by_xpath(
"//*[@id='product-ads']/div[2]/div[2]/div[3]/div/div[2]/div[5]/div[2]/div/span[2]")
StoreUnitsSold = driver.find_elements_by_xpath(
"//*[@id='product-ads']/div[2]/div[2]/div[3]/div/div[2]/div[6]/div[2]/div/span[2]")
StoreRevenue = driver.find_elements_by_xpath(
"//*[@id='product-ads']/div[2]/div[2]/div[3]/div/div[2]/div[7]/div[2]/div/span[2]")
StoreROI = driver.find_elements_by_xpath(
"//*[@id='product-ads']/div[2]/div[2]/div[3]/div/div[2]/div[8]/div[2]/div/span[2]")
spend_1 = spend[0].text.replace('MYR','')
Impressions_1 = Impressions[0].text
Clicks_1 = Clicks[0].text
CTR_1 = CTR[0].text
CPC_1 = CPC[0].text
StoreUnitsSold_1 = StoreUnitsSold[0].text
StoreRevenue_1 = StoreRevenue[0].text.replace('MYR','')
StoreROI_1 = StoreROI[0].text
datas = []
item = {}
item['spend'] = spend_1
item['Impressions'] = Impressions_1
item['Clicks'] = Clicks_1
item['CTR'] = CTR_1
item['CPC'] = CPC_1
item['StoreUnitsSold'] = StoreUnitsSold_1
item['StoreRevenue'] = StoreRevenue_1
item['StoreROI'] = StoreROI_1
item['username']=username
# dic = item
datas.append(item)
print(datas)
header = ['username','spend', 'Impressions', 'Clicks', 'CTR', 'CPC','StoreUnitsSold','StoreRevenue','StoreROI']
with open('test0801.csv', 'a', newline='', encoding='utf-8') as f:
writer = csv.DictWriter(f, fieldnames=header) # 提前预览列名,当下面代码写入数据时,会将其一一对应。
writer.writeheader() # 写入列名
writer.writerows(datas) # 写入数据
# ele_1 = driver.find_elements_by_xpath("//tr/td[5]/div/span")
# ele_2 = driver.find_elements_by_xpath("//tr/td[9]/div/div/div/span/input")
# # ele_2[0]
# for k in range(0, len(ele_1)):
# a = float(ele_2[k].get_attribute("value"))
# b = float(ele_1[k].text)
# judge = a / b
# print(a, b, judge)
# if judge < 0.85:
# ele_3 = driver.find_elements_by_xpath("//tr/td[1]/div/label/span/input")
# # target = driver.find_element_by_id("id_keypair")
# driver.execute_script("arguments[0].scrollIntoView();", ele_3[k]) # 拖动到可见的元素去
# time.sleep(2)
# ele_3[k].click()
# time.sleep(1)
# else:
# continue
#
# time.sleep(2)
# # export_excel() # 导出表格并调用宏处理 ,不能后台独立运行
# # 这里可以接循环,因为 提交一次后并不准
# ele_4 = driver.find_element_by_xpath("//button[contains(text(),'Join!')]").get_attribute("disabled")
# print(ele_4) # > true 就代表点击不了 None 才代表可点击
# if ele_4 == None:
# # for e in range(0,3):
# # driver.find_element_by_xpath("//button[contains(text(),'Join!')]").click()
# # ele_5 = driver.find_element_by_xpath("//button[contains(text(),'Join!')]").get_attribute("disabled")
# # if bool(ele_5)== False :
# # break
# driver.find_element_by_xpath("//button[contains(text(),'Join!')]").click()
# time.sleep(5)
# print('MY站已报名成功')
# else:
# pass
#
# time.sleep(2)
def PH_promotion(username):
time.sleep(5)
##点击推广详情
try:
driver.find_element_by_xpath(
"*//div/div[2]/div/div/div/div[6]/div/div[2]/section/div/div[2]/div[3]/div[2]/div[2]/table/tbody/tr/td[2]/div/div/div/div/div[1]/a").click()
time.sleep(2)
except NoSuchElementException:
return
# 点击时间轴
try:
driver.find_element_by_xpath(
"//div[2]/span/input").click()
time.sleep(5)
except NoSuchElementException:
return
# 点击过去30天 7月1号 -7月 31号
try:
# 向上一个月
driver.find_element_by_xpath(
"//*[@id='product-ads']/div[4]/div/div/div/div/div[1]/div[1]/div[2]/div[1]/div/a[2]").click()
time.sleep(2)
driver.find_element_by_xpath(
"//*[@id='product-ads']/div[4]/div/div/div/div/div[1]/div[1]/div[2]/div[2]/table/tbody/tr[1]/td[6]/div").click()
time.sleep(2)
driver.find_element_by_xpath(
"//*[@id='product-ads']/div[4]/div/div/div/div/div[1]/div[1]/div[2]/div[2]/table/tbody/tr[6]/td[1]/div").click()
time.sleep(2)
except NoSuchElementException:
return
spend = driver.find_elements_by_xpath(
"//*[@id='product-ads']/div[2]/div[2]/div[3]/div/div[2]/div[1]/div[2]/div/span[2]")
Impressions = driver.find_elements_by_xpath(
"//*[@id='product-ads']/div[2]/div[2]/div[3]/div/div[2]/div[2]/div[2]/div/span[2]")
Clicks = driver.find_elements_by_xpath(
"//*[@id='product-ads']/div[2]/div[2]/div[3]/div/div[2]/div[3]/div[2]/div/span[2]")
CTR = driver.find_elements_by_xpath(
"//*[@id='product-ads']/div[2]/div[2]/div[3]/div/div[2]/div[4]/div[2]/div/span[1]")
CPC = driver.find_elements_by_xpath(
"//*[@id='product-ads']/div[2]/div[2]/div[3]/div/div[2]/div[5]/div[2]/div/span[2]")
StoreUnitsSold = driver.find_elements_by_xpath(
"//*[@id='product-ads']/div[2]/div[2]/div[3]/div/div[2]/div[6]/div[2]/div/span[2]")
StoreRevenue = driver.find_elements_by_xpath(
"//*[@id='product-ads']/div[2]/div[2]/div[3]/div/div[2]/div[7]/div[2]/div/span[2]")
StoreROI = driver.find_elements_by_xpath(
"//*[@id='product-ads']/div[2]/div[2]/div[3]/div/div[2]/div[8]/div[2]/div/span[2]")
spend_1 = spend[0].text.replace('PHP', '')
Impressions_1 = Impressions[0].text
Clicks_1 = Clicks[0].text
CTR_1 = CTR[0].text
CPC_1 = CPC[0].text
StoreUnitsSold_1 = StoreUnitsSold[0].text
StoreRevenue_1 = StoreRevenue[0].text.replace('PHP', '')
StoreROI_1 = StoreROI[0].text
datas = []
item = {}
item['spend'] = spend_1
item['Impressions'] = Impressions_1
item['Clicks'] = Clicks_1
item['CTR'] = CTR_1
item['CPC'] = CPC_1
item['StoreUnitsSold'] = StoreUnitsSold_1
item['StoreRevenue'] = StoreRevenue_1
item['StoreROI'] = StoreROI_1
item['username'] = username
# dic = item
datas.append(item)
print(datas)
header = ['username', 'spend', 'Impressions', 'Clicks', 'CTR', 'CPC', 'StoreUnitsSold', 'StoreRevenue', 'StoreROI']
with open('test0801.csv', 'a', newline='', encoding='utf-8') as f:
writer = csv.DictWriter(f, fieldnames=header) # 提前预览列名,当下面代码写入数据时,会将其一一对应。
writer.writeheader() # 写入列名
writer.writerows(datas) # 写入数据
def SG_promotion():
try:
driver.find_element_by_xpath(
"//h4[contains(text(),'May 2022 - April 2023 LazGlobal International Day BAU Campaign')]").click()
time.sleep(2)
except NoSuchElementException:
return
x_exist() # 判断第二个X键
driver.find_element_by_xpath("//span[contains(text(),'Available Campaign')]").click()
time.sleep(2)
try:
driver.find_element_by_xpath(
"//h4[contains(text(),'2022 International Day | All Sellers | 18 May')]").click()
time.sleep(5)
except NoSuchElementException:
return
try:
driver.find_element_by_xpath("//button[contains(text(),'Join Now')]").click()
time.sleep(5)
except NoSuchElementException:
return
for i in range(1, 4):
flag = isElementExist("//button[contains(text(),'Submit by Excel')]")
if flag:
break
else:
alert()
export_excel() # 导出表格并调用宏处理 ,不能后台独立运行
print('SG站已报名成功')
def TH_promotion(username):
time.sleep(5)
##点击推广详情
try:
driver.find_element_by_xpath(
"*//div/div[2]/div/div/div/div[6]/div/div[2]/section/div/div[2]/div[3]/div[2]/div[2]/table/tbody/tr/td[2]/div/div/div/div/div[1]/a").click()
time.sleep(2)
except NoSuchElementException:
return
# 点击时间轴
try:
driver.find_element_by_xpath(
"//div[2]/span/input").click()
time.sleep(5)
except NoSuchElementException:
return
# 点击过去30天 7月1号 -7月 31号
try:
# 向上一个月
driver.find_element_by_xpath(
"//*[@id='product-ads']/div[4]/div/div/div/div/div[1]/div[1]/div[2]/div[1]/div/a[2]").click()
time.sleep(2)
driver.find_element_by_xpath(
"//*[@id='product-ads']/div[4]/div/div/div/div/div[1]/div[1]/div[2]/div[2]/table/tbody/tr[1]/td[6]/div").click()
time.sleep(2)
driver.find_element_by_xpath(
"//*[@id='product-ads']/div[4]/div/div/div/div/div[1]/div[1]/div[2]/div[2]/table/tbody/tr[6]/td[1]/div").click()
time.sleep(2)
except NoSuchElementException:
return
spend = driver.find_elements_by_xpath(
"//*[@id='product-ads']/div[2]/div[2]/div[3]/div/div[2]/div[1]/div[2]/div/span[2]")
Impressions = driver.find_elements_by_xpath(
"//*[@id='product-ads']/div[2]/div[2]/div[3]/div/div[2]/div[2]/div[2]/div/span[2]")
Clicks = driver.find_elements_by_xpath(
"//*[@id='product-ads']/div[2]/div[2]/div[3]/div/div[2]/div[3]/div[2]/div/span[2]")
CTR = driver.find_elements_by_xpath(
"//*[@id='product-ads']/div[2]/div[2]/div[3]/div/div[2]/div[4]/div[2]/div/span[1]")
CPC = driver.find_elements_by_xpath(
"//*[@id='product-ads']/div[2]/div[2]/div[3]/div/div[2]/div[5]/div[2]/div/span[2]")
StoreUnitsSold = driver.find_elements_by_xpath(
"//*[@id='product-ads']/div[2]/div[2]/div[3]/div/div[2]/div[6]/div[2]/div/span[2]")
StoreRevenue = driver.find_elements_by_xpath(
"//*[@id='product-ads']/div[2]/div[2]/div[3]/div/div[2]/div[7]/div[2]/div/span[2]")
StoreROI = driver.find_elements_by_xpath(
"//*[@id='product-ads']/div[2]/div[2]/div[3]/div/div[2]/div[8]/div[2]/div/span[2]")
spend_1 = spend[0].text.replace('THB', '')
Impressions_1 = Impressions[0].text
Clicks_1 = Clicks[0].text
CTR_1 = CTR[0].text
CPC_1 = CPC[0].text
StoreUnitsSold_1 = StoreUnitsSold[0].text
StoreRevenue_1 = StoreRevenue[0].text.replace('THB', '')
StoreROI_1 = StoreROI[0].text
datas = []
item = {}
item['spend'] = spend_1
item['Impressions'] = Impressions_1
item['Clicks'] = Clicks_1
item['CTR'] = CTR_1
item['CPC'] = CPC_1
item['StoreUnitsSold'] = StoreUnitsSold_1
item['StoreRevenue'] = StoreRevenue_1
item['StoreROI'] = StoreROI_1
item['username'] = username
# dic = item
datas.append(item)
print(datas)
header = ['username', 'spend', 'Impressions', 'Clicks', 'CTR', 'CPC', 'StoreUnitsSold', 'StoreRevenue', 'StoreROI']
with open('test0801.csv', 'a', newline='', encoding='utf-8') as f:
writer = csv.DictWriter(f, fieldnames=header) # 提前预览列名,当下面代码写入数据时,会将其一一对应。
writer.writeheader() # 写入列名
writer.writerows(datas) # 写入数据
def VN_promotion(username):
time.sleep(5)
##点击推广详情
try:
driver.find_element_by_xpath(
"*//div/div[2]/div/div/div/div[6]/div/div[2]/section/div/div[2]/div[3]/div[2]/div[2]/table/tbody/tr/td[2]/div/div/div/div/div[1]/a").click()
time.sleep(2)
except NoSuchElementException:
return
# 点击时间轴
try:
driver.find_element_by_xpath(
"//div[2]/span/input").click()
time.sleep(5)
except NoSuchElementException:
return
# 点击过去30天 7月1号 -7月 31号
try:
# 向上一个月
driver.find_element_by_xpath(
"//*[@id='product-ads']/div[4]/div/div/div/div/div[1]/div[1]/div[2]/div[1]/div/a[2]").click()
time.sleep(2)
driver.find_element_by_xpath(
"//*[@id='product-ads']/div[4]/div/div/div/div/div[1]/div[1]/div[2]/div[2]/table/tbody/tr[1]/td[6]/div").click()
time.sleep(2)
driver.find_element_by_xpath(
"//*[@id='product-ads']/div[4]/div/div/div/div/div[1]/div[1]/div[2]/div[2]/table/tbody/tr[6]/td[1]/div").click()
time.sleep(2)
except NoSuchElementException:
return
spend = driver.find_elements_by_xpath(
"//*[@id='product-ads']/div[2]/div[2]/div[3]/div/div[2]/div[1]/div[2]/div/span[2]")
Impressions = driver.find_elements_by_xpath(
"//*[@id='product-ads']/div[2]/div[2]/div[3]/div/div[2]/div[2]/div[2]/div/span[2]")
Clicks = driver.find_elements_by_xpath(
"//*[@id='product-ads']/div[2]/div[2]/div[3]/div/div[2]/div[3]/div[2]/div/span[2]")
CTR = driver.find_elements_by_xpath(
"//*[@id='product-ads']/div[2]/div[2]/div[3]/div/div[2]/div[4]/div[2]/div/span[1]")
CPC = driver.find_elements_by_xpath(
"//*[@id='product-ads']/div[2]/div[2]/div[3]/div/div[2]/div[5]/div[2]/div/span[2]")
StoreUnitsSold = driver.find_elements_by_xpath(
"//*[@id='product-ads']/div[2]/div[2]/div[3]/div/div[2]/div[6]/div[2]/div/span[2]")
StoreRevenue = driver.find_elements_by_xpath(
"//*[@id='product-ads']/div[2]/div[2]/div[3]/div/div[2]/div[7]/div[2]/div/span[2]")
StoreROI = driver.find_elements_by_xpath(
"//*[@id='product-ads']/div[2]/div[2]/div[3]/div/div[2]/div[8]/div[2]/div/span[2]")
spend_1 = spend[0].text.replace('VND', '')
Impressions_1 = Impressions[0].text
Clicks_1 = Clicks[0].text
CTR_1 = CTR[0].text
CPC_1 = CPC[0].text
StoreUnitsSold_1 = StoreUnitsSold[0].text
StoreRevenue_1 = StoreRevenue[0].text.replace('VND', '')
StoreROI_1 = StoreROI[0].text
datas = []
item = {}
item['spend'] = spend_1
item['Impressions'] = Impressions_1
item['Clicks'] = Clicks_1
item['CTR'] = CTR_1
item['CPC'] = CPC_1
item['StoreUnitsSold'] = StoreUnitsSold_1
item['StoreRevenue'] = StoreRevenue_1
item['StoreROI'] = StoreROI_1
item['username'] = username
# dic = item
datas.append(item)
print(datas)
header = ['username', 'spend', 'Impressions', 'Clicks', 'CTR', 'CPC', 'StoreUnitsSold', 'StoreRevenue', 'StoreROI']
with open('test0801.csv', 'a', newline='', encoding='utf-8') as f:
writer = csv.DictWriter(f, fieldnames=header) # 提前预览列名,当下面代码写入数据时,会将其一一对应。
writer.writeheader() # 写入列名
writer.writerows(datas) # 写入数据
# 登入页面
def login_pass(username, password):
driver.get(url=login_url)
# time.sleep属于强制等待,模拟人的等待行为
time.sleep(3)
count = 3
while count:
# 登入
flag = id_exist("fm-login-id")
if flag:
try_login(username, password)
# print('第%s次尝试' % i)
# i = i + 1
# 判断语句
else:
count -= 1
i = 3 - count
print('%s 登入失败' % username)
print('第%s尝试失败,总计3次' % i)
continue
time.sleep(3)
flag = isElementExist("//*[contains(text(),'Promotions')]")
for i in range(1, 3):
if flag:
print('%s 登入成功' % username)
# 找到活动页
try_promotions()
break
else:
print("等待活动页")
# 切换到活动页
time.sleep(5)
# driver.close()
for handle in driver.window_handles:
# 先切换到该窗口
driver.switch_to.window(handle)
# 得到该窗口的标题栏字符串,判断是不是我们要操作的那个窗口
if 'Seller Center' in driver.title:
# 如果是,那么这时候WebDriver对象就是对应的该该窗口,正好,跳出循环,
break
# print(driver.title)
# page=driver.page_source
# print(page)
# dig_alert = driver.switch_to_alert()
# print(dig_alert.text)
# alert.dismiss()
# div类型弹窗
##################################################
############### 每次活动都不一样?###########
# 下滑一次
# driver.execute_script("window.scrollBy(0,300)")
# time.sleep(3)
# special invitation
### MY 推广 ###
for j in range(1, 3):
x_exist() # 判断是否有其他窗口
'''
time.sleep(2)
driver.execute_script("window.scrollBy(0,800)")
time.sleep(2)
flag = isElementExist("//table/tbody/tr/td[2]/div/div/div/div/div[1]/a")
if flag:
MY_promotion(username)
else:
print('%s MY站无推广计划' % username)
###切换站点处理/ Philippine ######
try:
driver.find_element_by_xpath("//span[contains(text(),'Philippine')]").click()
time.sleep(2)
except NoSuchElementException:
return
##########################
for j in range(1, 3):
x_exist() # 判断是否有其他窗口
try:
# Management
driver.find_element_by_xpath("//*[@id='product-ads']/div[2]/div/div/div[1]/div/div[2]/div[1]/div[2]/div[3]/span/button/span").click()
time.sleep(2)
except NoSuchElementException:
print('无推广计划')
return
time.sleep(2)
driver.execute_script("window.scrollBy(0,800)")
time.sleep(2)
flag = isElementExist("//table/tbody/tr/td[2]/div/div/div/div/div[1]/a")
if flag:
PH_promotion(username)
else:
print('%s PH站无活动页面')
###切换站点处理/ Singapore ######
driver.find_element_by_xpath("//span[contains(text(),'Singapore')]").click()
time.sleep(2)
##########################
for j in range(1, 3):
x_exist() # 判断第一个X键
flag = isElementExist("//h4[contains(text(),'May 2022 - April 2023 LazGlobal International Day BAU Campaign')]")
if flag:
SG_promotion()
else:
print('%s SG站无活动页面')
###切换站点处理/ Thailand ######
driver.find_element_by_xpath("//span[contains(text(),'Thailand')]").click()
time.sleep(2)
##########################
for j in range(1, 3):
x_exist() # 判断是否有其他窗口
try:
# Management
driver.find_element_by_xpath("//*[@id='product-ads']/div[2]/div/div/div[1]/div/div[2]/div[1]/div[2]/div[3]/span/button/span").click()
time.sleep(2)
except NoSuchElementException:
print('无推广计划')
return
time.sleep(2)
driver.execute_script("window.scrollBy(0,1200)")
time.sleep(2)
flag = isElementExist("//table/tbody/tr/td[2]/div/div/div/div/div[1]/a")
if flag:
TH_promotion(username)
else:
print('%s TH站无活动页面')
'''
###切换站点处理/ Vietnam ######
try:
driver.find_element_by_xpath("//span[contains(text(),'Vietnam')]").click()
time.sleep(2)
except NoSuchElementException:
return
##########################
for j in range(1, 3):
x_exist() # 判断是否有其他窗口
try:
# Management
driver.find_element_by_xpath("//*[@id='product-ads']/div[2]/div/div/div[1]/div/div[2]/div[1]/div[2]/div[3]/span/button/span").click()
time.sleep(2)
except NoSuchElementException:
print('无推广计划')
return
time.sleep(2)
driver.execute_script("window.scrollBy(0,1200)")
time.sleep(2)
flag = isElementExist("//table/tbody/tr/td[2]/div/div/div/div/div[1]/a")
if flag:
VN_promotion(username)
else:
print('%s VN站无活动页面')
# 分站点 读取文件,写入文件,提交报名部分
def login(url):
# 循环账号
work_book = xlrd.open_workbook('usename.xls')
sheet_1 = work_book.sheet_by_index(0)
for i in range(1, 90):
global usename
try:
username = sheet_1.cell_value(i, 0)
except IndexError:
print('list index out of range')
return
password = sheet_1.cell_value(i, 1)
# print(username)
# print(password)
# 第一次登入
login_pass(username, password)
time.sleep(3)
driver.get(url=login_url)
time.sleep(20)
driver.quit()
def main():
login(login_url)
# login()
if __name__ == '__main__':
main()