Skip to content

Commit

Permalink
feat(huawei): 增加套装SKU配置及选择
Browse files Browse the repository at this point in the history
Closes #24
  • Loading branch information
ancoka committed Sep 30, 2023
1 parent 42da545 commit 6b88d24
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 12 deletions.
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,11 +55,13 @@
#### 2. 填写config.ini配置信息
(1)账号信息:`name``password` 填写对应的华为账号、密码

(2)商品信息:`name``id``color``version` 分别为对应的商品名称、商品ID、手机颜色(宣白)、手机版本(16GB+512GB)
(2)商品信息:`name``id``color``version`,`saleType`,`sets` 分别为对应的商品名称、商品ID、手机颜色(宣白)、手机版本(16GB+512GB)、销售类型、套装规格

> `id`默认填写Mate60Pro+,如需修改请自行修改
> `color` 默认填写宣白,如需修改请自行修改对应手机的颜色
> `version` 默认填写16GB+512GB,如需修改请自行修改对应手机的版本
> `saleType` 销售类型,默认填写全款购买,如需修改请自行修改对应手机支持的销售类型
> `sets` 套装规格默认为空,当填写后程序将只抢购套装;需要填写套装对应的SKU信息,不同SKU信息之前采用“,”分割,如:“12GB+512GB 青山黛,木星棕 深棕色真皮表带,雅川青 无线充版”
(3)浏览器:`userDataDir`谷歌浏览器默认用户数据目录:
- MacOS默认路径为:/Users/用户名/Library/Application Support/Google/Chrome/Default
Expand Down
1 change: 1 addition & 0 deletions config.ini
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ id=10086764961298
color=宣白
version=16GB+512GB
payment=全款购买
# sets=12GB+512GB 青山黛,木星棕 深棕色真皮表带,雅川青 无线充版

[chrome]
userDataDir=/Users/用户名/Library/Application Support/Google/Chrome/Default
39 changes: 28 additions & 11 deletions huawei.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ def __init__(self, config_file):
self.__browser_setting()

def start_process(self):
print("{0} 开启抢购华为 {1} 手机".format(datetime.now(), self.__config_get("product", "name")))
print("{0} 开启抢购华为手机 {1}".format(datetime.now(), self.__config_get("product", "name")))
self.__visit_official_website()
self.__login()
if self.isLogin:
Expand All @@ -44,7 +44,7 @@ def start_process(self):
self.__submit_order()

def stop_process(self):
print("{0} 结束抢购华为 {1} 手机".format(datetime.now(), self.__config_get("product", "name")))
print("{0} 结束抢购华为手机 {1}".format(datetime.now(), self.__config_get("product", "name")))
time.sleep(120)
self.browser.quit()

Expand All @@ -61,7 +61,29 @@ def __visit_product_page(self):
print("{0} 已进入华为 {1} 产品详情页".format(datetime.now(), self.__config_get("product", "name")))

def __choose_product(self):
print("{0} 开始选择手机规格".format(datetime.now()))
sets = self.__config_get("product", "sets")
if not sets.isspace() & len(sets) > 0:
self.__choose_product_sets(sets)
else:
self.__choose_product_item()

def __choose_product_sets(self, sets):
print("{0} 开始选择手机套装规格".format(datetime.now()))
set_skus = sets.split(",")
for sku in set_skus:
WebDriverWait(self.browser, self.defaultTimeout).until(
EC.presence_of_element_located((By.LINK_TEXT, f"{sku}"))
).click()
sku_payment = '无'
if EC.text_to_be_present_in_element((By.CSS_SELECTOR, "#pro-skus > dl:last-child > label"), "选择销售类型")(self.browser):
sku_payment = self.__config_get("product", "payment")
WebDriverWait(self.browser, self.defaultTimeout).until(
EC.presence_of_element_located((By.LINK_TEXT, f"{sku_payment}"))
).click()
print("{0} 选择手机套装规格完成,套装规格:{1} 销售类型:{2}".format(datetime.now(), sets, sku_payment))

def __choose_product_item(self):
print("{0} 开始选择手机单品规格".format(datetime.now()))
sku_color = self.__config_get("product", "color")
sku_version = self.__config_get("product", "version")
WebDriverWait(self.browser, self.defaultTimeout).until(
Expand All @@ -70,18 +92,13 @@ def __choose_product(self):
WebDriverWait(self.browser, self.defaultTimeout).until(
EC.presence_of_element_located((By.LINK_TEXT, f"{sku_version}"))
).click()

if EC.text_to_be_present_in_element((By.CSS_SELECTOR, "#pro-skus > dl > label"), "销售类型")(self.browser):
sku_payment = '无'
if EC.text_to_be_present_in_element((By.CSS_SELECTOR, "#pro-skus > dl:last-child > label"), "选择销售类型")(self.browser):
sku_payment = self.__config_get("product", "payment")
WebDriverWait(self.browser, self.defaultTimeout).until(
EC.presence_of_element_located((By.LINK_TEXT, f"{sku_payment}"))
).click()

print("{0} 选择手机规格完成,颜色:{1} 版本:{2} 销售类型:{3}".format(datetime.now(), sku_color, sku_version, sku_payment))
else:
print("{0} 选择手机规格完成,颜色:{1} 版本:{2}".format(datetime.now(), sku_color, sku_version))
pass
time.sleep(0.01)
print("{0} 选择手机单品规格完成,颜色:{1} 版本:{2} 销售类型:{3}".format(datetime.now(), sku_color, sku_version, sku_payment))

def __login(self):
print("{0} 开始登陆华为账号".format(datetime.now()))
Expand Down

0 comments on commit 6b88d24

Please sign in to comment.