#!/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("//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(
"//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(
"//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()