Commit fe4c52b5 authored by 邱阿朋's avatar 邱阿朋

多国家

parent 4a31fbe6
...@@ -10,7 +10,7 @@ from DrissionPage import ChromiumPage ...@@ -10,7 +10,7 @@ from DrissionPage import ChromiumPage
from DrissionPage.errors import ElementNotFoundError from DrissionPage.errors import ElementNotFoundError
from lxml import etree from lxml import etree
from helper import helper, excel, file from helper import helper, excel, file, domain
page = ChromiumPage() page = ChromiumPage()
page.set.load_mode.eager() page.set.load_mode.eager()
...@@ -24,6 +24,12 @@ helper.make_dir(download_path) ...@@ -24,6 +24,12 @@ helper.make_dir(download_path)
page.set.download_path(download_path) page.set.download_path(download_path)
def page_get(url):
host = domain.switch_domain(country)
full_url = host + url
page.get(full_url, timeout=3)
def sku_relations(): def sku_relations():
relations_dict = {} relations_dict = {}
df = pd.read_excel('relations.xlsx') df = pd.read_excel('relations.xlsx')
...@@ -37,14 +43,14 @@ def sku_relations(): ...@@ -37,14 +43,14 @@ def sku_relations():
def export_list_read_data(): def export_list_read_data():
file_name = "ContraCogsInvoices.xls" file_name = "ContraCogsInvoices.xls"
if not os.path.isfile(file_name): if not os.path.isfile(file_name):
# raise FileNotFoundError(f"{file_name},文件不存在") raise FileNotFoundError(f"{file_name},文件不存在")
page.get("https://vendorcentral.amazon.com/hz/vendor/members/coop?ref_=vc_xx_subNav") # page_get("hz/vendor/members/coop?ref_=vc_xx_subNav")
# 全选 # # 全选
page.ele("#select-all").click() # page.ele("#select-all").click()
# 点击选项卡 # # 点击选项卡
page.ele("#cc-invoice-actions-dropdown").click() # page.ele("#cc-invoice-actions-dropdown").click()
# 点击下载报表 # # 点击下载报表
page.ele("#cc-invoice-actions-dropdown_2").click.to_download().wait() # page.ele("#cc-invoice-actions-dropdown_2").click.to_download().wait()
return pd.read_excel(file_name, engine='xlrd') return pd.read_excel(file_name, engine='xlrd')
...@@ -52,7 +58,7 @@ def export_list_read_data(): ...@@ -52,7 +58,7 @@ def export_list_read_data():
def get_report_table_html(invoice_id): def get_report_table_html(invoice_id):
while True: while True:
try: try:
page.get(f"https://vendorcentral.amazon.com/hz/vendor/members/coop?searchText={invoice_id}") page_get(f"hz/vendor/members/coop?searchText={invoice_id}")
# 点击选项卡 # 点击选项卡
page.ele("#a-autoid-2-announce").click() page.ele("#a-autoid-2-announce").click()
# 下载报表 # 下载报表
...@@ -69,6 +75,7 @@ def get_report_table_html(invoice_id): ...@@ -69,6 +75,7 @@ def get_report_table_html(invoice_id):
print("元素未找到,刷新网页") print("元素未找到,刷新网页")
page.refresh() page.refresh()
def export_item_read_data(invoice_id): def export_item_read_data(invoice_id):
file_name = f"coop\\{invoice_id}.xlsx" file_name = f"coop\\{invoice_id}.xlsx"
if os.path.isfile(file_name): if os.path.isfile(file_name):
...@@ -87,7 +94,8 @@ def export_item_read_data(invoice_id): ...@@ -87,7 +94,8 @@ def export_item_read_data(invoice_id):
# 提取 filename 参数 # 提取 filename 参数
filename = query_params.get('fileName', ['未找到文件名'])[0] filename = query_params.get('fileName', ['未找到文件名'])[0]
report_file_tmp_dir = f"coop\\{invoice_id}\\{filename}\\" report_file_tmp_dir = f"coop\\{invoice_id}\\{filename}\\"
page.download("https://vendorcentral.amazon.com" + link, report_file_tmp_dir, show_msg=True) host = domain.switch_domain(country)
page.download(host + link, report_file_tmp_dir, show_msg=True)
report_file = report_file_tmp_dir + "BackupReport.xls" report_file = report_file_tmp_dir + "BackupReport.xls"
file.wait_for_downloads(report_file) file.wait_for_downloads(report_file)
...@@ -114,7 +122,6 @@ def export_item_read_data(invoice_id): ...@@ -114,7 +122,6 @@ def export_item_read_data(invoice_id):
def main(): def main():
relation_data = sku_relations() # 获取 ASIN 与 SKU 的对应关系数据 relation_data = sku_relations() # 获取 ASIN 与 SKU 的对应关系数据
coop_list = export_list_read_data() # 获取合作数据列表 coop_list = export_list_read_data() # 获取合作数据列表
coop_list = coop_list[:10]
print(f"共计:{len(coop_list)} 条数据") print(f"共计:{len(coop_list)} 条数据")
i = 0 i = 0
...@@ -199,6 +206,12 @@ def main(): ...@@ -199,6 +206,12 @@ def main():
if __name__ == '__main__': if __name__ == '__main__':
try: try:
country = helper.get_input_with_default("国家", "usa")
if country is None:
raise Exception("请选择国家")
main() main()
except KeyboardInterrupt:
pass
except Exception as e: except Exception as e:
print(e) print(e)
# coding: utf-8
def switch_domain(country):
domain = "https://vendorcentral.amazon.com/"
if country == "jp":
domain = "https://vendorcentral.amazon.co.jp/"
if country == "uk":
domain = "https://vendorcentral.amazon.co.uk/"
if country == "fr":
domain = "https://vendorcentral.amazon.fr/"
if country == "ca":
domain = "https://vendorcentral.amazon.ca/"
if country == "mx":
domain = "https://vendorcentral.amazon.com.mx/"
return domain
...@@ -10,7 +10,7 @@ from DrissionPage import ChromiumPage ...@@ -10,7 +10,7 @@ from DrissionPage import ChromiumPage
from DrissionPage.errors import ElementNotFoundError from DrissionPage.errors import ElementNotFoundError
from lxml import etree from lxml import etree
from helper import helper, excel, file from helper import helper, excel, file, domain
page = ChromiumPage() page = ChromiumPage()
page.set.load_mode.normal() page.set.load_mode.normal()
...@@ -26,6 +26,12 @@ page.set.download_path(download_path) ...@@ -26,6 +26,12 @@ page.set.download_path(download_path)
warnings.filterwarnings("ignore", category=UserWarning, module="openpyxl") warnings.filterwarnings("ignore", category=UserWarning, module="openpyxl")
def page_get(url):
host = domain.switch_domain(country)
full_url = host + url
page.get(full_url, timeout=3)
def export_list_read_data(): def export_list_read_data():
new_file_name = 'new_Payments.xlsx' new_file_name = 'new_Payments.xlsx'
if os.path.isfile(new_file_name): if os.path.isfile(new_file_name):
...@@ -34,13 +40,13 @@ def export_list_read_data(): ...@@ -34,13 +40,13 @@ def export_list_read_data():
file_name = 'Payments.xlsx' file_name = 'Payments.xlsx'
if not os.path.isfile(file_name): if not os.path.isfile(file_name):
# raise FileNotFoundError(f"{file_name},文件不存在") raise FileNotFoundError(f"{file_name},文件不存在")
pass pass
page.get(f"https://vendorcentral.amazon.com/hz/vendor/members/remittance/home", timeout=3) # page_get(f"hz/vendor/members/remittance/home")
page.ele("#remittance-home-select-all", timeout=2).click() # page.ele("#remittance-home-select-all", timeout=2).click()
page.ele("#remittance-home-export-link", timeout=2).click.to_download() # page.ele("#remittance-home-export-link", timeout=2).click.to_download()
file.wait_for_downloads(file_name) # file.wait_for_downloads(file_name)
all_df = pd.read_excel(file_name, header=None) all_df = pd.read_excel(file_name, header=None)
...@@ -70,13 +76,13 @@ def export_list_read_data(): ...@@ -70,13 +76,13 @@ def export_list_read_data():
def export_details_read_data(invoice_number): def export_details_read_data(invoice_number):
params = { params = {
"invoiceNumber": invoice_number, "invoiceNumber": invoice_number,
"payeeCode": "VECET", "payeeCode": "E8PFB",
"activeTab": "lineItems", "activeTab": "lineItems",
} }
# 将字典转换为 URL 查询参数 # 将字典转换为 URL 查询参数
query_string = urllib.parse.urlencode(params) query_string = urllib.parse.urlencode(params)
full_url = f"https://vendorcentral.amazon.com/hz/vendor/members/inv-mgmt/invoice-details?" + query_string full_url = f"hz/vendor/members/inv-mgmt/invoice-details?" + query_string
page.get(full_url, timeout=3) page_get(full_url)
# 读取详情内容 # 读取详情内容
file_name = f"invoices\\{invoice_number}.csv" file_name = f"invoices\\{invoice_number}.csv"
...@@ -108,7 +114,7 @@ def get_po_code(index, po_id) -> dict: ...@@ -108,7 +114,7 @@ def get_po_code(index, po_id) -> dict:
"po_id": po_id "po_id": po_id
} }
page.get(f"https://vendorcentral.amazon.com/po/vendor/members/po-mgmt/order?poId={po_id}", timeout=3) page_get(f"po/vendor/members/po-mgmt/order?poId={po_id}")
po_table = page.ele("#po-header", timeout=5).html po_table = page.ele("#po-header", timeout=5).html
# 使用 lxml 解析 HTML # 使用 lxml 解析 HTML
...@@ -122,7 +128,7 @@ def get_po_code(index, po_id) -> dict: ...@@ -122,7 +128,7 @@ def get_po_code(index, po_id) -> dict:
if match: if match:
result["payment_terms"] = match.group(1)[:-1] # 去掉% result["payment_terms"] = match.group(1)[:-1] # 去掉%
else: else:
result["payment_terms"] = None result["payment_terms"] = 0
return result return result
...@@ -168,12 +174,12 @@ def price_extract_data(html_content): ...@@ -168,12 +174,12 @@ def price_extract_data(html_content):
def click_get_price_data(): def click_get_price_data():
try: try:
# 获取 Amounts 表格html # 获取 Amounts 表格html
page_html = page.ele(".a-box-inner", timeout=5).html page_html = page.ele(".a-box-inner", timeout=3).html
# 使用 lxml 解析 HTML # 使用 lxml 解析 HTML
tree = etree.HTML(page_html) tree = etree.HTML(page_html)
# 使用 XPath 查找第三个 span class="a-color-base invoice-property-field" # 提取第二个 class="a-column a-span4" 下的第三个 class="a-row invoice-property-field-row" 下的 span 的值
price_variance_amount = tree.xpath( price_variance_amount = tree.xpath(
'//span[contains(text(),"Price variance amount (price claim)")]/../../div[@class="a-column a-span6 a-span-last"]/span/text()') '(//div[@class="a-column a-span4"])[2]//div[@class="a-row invoice-property-field-row"][3]//div[@class="a-column a-span6 a-span-last"]/span/text()')
# 检查内容是否有效 # 检查内容是否有效
if price_variance_amount and price_variance_amount[0].strip() != "-": if price_variance_amount and price_variance_amount[0].strip() != "-":
page.ele("#pd", timeout=5).click() page.ele("#pd", timeout=5).click()
...@@ -221,8 +227,11 @@ def handle_data(detail_datum, vendor, deduction_points): ...@@ -221,8 +227,11 @@ def handle_data(detail_datum, vendor, deduction_points):
if detail_datum.get('Shortage quantity', -1) == 0: if detail_datum.get('Shortage quantity', -1) == 0:
is_finished = "是" is_finished = "是"
# 计算扣除后的金额 amount_after_deduction = amount
amount_after_deduction = amount - (amount * (deduction_points / 100)) if deduction_points > 0:
# 计算扣除后的金额
amount_after_deduction = amount - (amount * (deduction_points / 100))
# 复制原始行数据,避免直接修改 # 复制原始行数据,避免直接修改
record = detail_datum.copy() record = detail_datum.copy()
record["IsFinished"] = is_finished record["IsFinished"] = is_finished
...@@ -235,8 +244,8 @@ def handle_data(detail_datum, vendor, deduction_points): ...@@ -235,8 +244,8 @@ def handle_data(detail_datum, vendor, deduction_points):
def main(): def main():
list_data = export_list_read_data() list_data = export_list_read_data()
# list_data = list_data[62:]
print(f"共计:{len(list_data)} 订单") print(f"共计:{len(list_data)} 订单")
all_normal_pay_data = [] all_normal_pay_data = []
all_price_pay_data = [] all_price_pay_data = []
i = 0 i = 0
...@@ -247,8 +256,7 @@ def main(): ...@@ -247,8 +256,7 @@ def main():
invoice_number = invoice_number[:8] invoice_number = invoice_number[:8]
# 获取当前订单的Payee和优惠比例 # 获取当前订单的Payee和优惠比例
vendor_payment_terms = get_po_code(i, invoice_number) vendor_payment_terms = get_po_code(i, invoice_number)
page.wait(2)
print(vendor_payment_terms) print(vendor_payment_terms)
vendor = vendor_payment_terms['vendor'] vendor = vendor_payment_terms['vendor']
...@@ -256,7 +264,6 @@ def main(): ...@@ -256,7 +264,6 @@ def main():
# 下载excel文件并读取数据 # 下载excel文件并读取数据
detail_data = export_details_read_data(invoice_number) detail_data = export_details_read_data(invoice_number)
page.wait(2)
# 获取争议数据 # 获取争议数据
all_price_data = click_get_price_data() all_price_data = click_get_price_data()
...@@ -297,6 +304,12 @@ def main(): ...@@ -297,6 +304,12 @@ def main():
if __name__ == '__main__': if __name__ == '__main__':
try: try:
country = helper.get_input_with_default("国家", "usa")
if country is None:
raise Exception("请选择国家")
main() main()
except KeyboardInterrupt:
pass
except Exception as e: except Exception as e:
print(e) print(e)
...@@ -6,10 +6,9 @@ import pandas as pd ...@@ -6,10 +6,9 @@ import pandas as pd
from DrissionPage import ChromiumPage from DrissionPage import ChromiumPage
from DrissionPage.errors import ElementNotFoundError from DrissionPage.errors import ElementNotFoundError
from helper import helper, excel, file from helper import helper, excel, file, domain
email = None country = None
password = None
page = ChromiumPage() page = ChromiumPage()
page.set.load_mode.eager() page.set.load_mode.eager()
...@@ -23,6 +22,12 @@ helper.make_dir(download_path) ...@@ -23,6 +22,12 @@ helper.make_dir(download_path)
page.set.download_path(download_path) page.set.download_path(download_path)
def page_get(url):
host = domain.switch_domain(country)
full_url = host + url
page.get(full_url, timeout=3)
def sku_relations(): def sku_relations():
relations_dict = {} relations_dict = {}
# 读取ASIN和sku映射关系 # 读取ASIN和sku映射关系
...@@ -41,12 +46,12 @@ def sku_relations(): ...@@ -41,12 +46,12 @@ def sku_relations():
def export_list_read_data(): def export_list_read_data():
file_name = "Return_Summary.xls" file_name = "Return_Summary.xls"
if not os.path.isfile(file_name): if not os.path.isfile(file_name):
# raise FileNotFoundError(f"{file_name},文件不存在") raise FileNotFoundError(f"{file_name},文件不存在")
# 访问网页 # 访问网页
page.get("https://vendorcentral.amazon.com/hz/vendor/members/returns?ref_=vc_xx_subNav", timeout=3) # page_get("hz/vendor/members/returns?ref_=vc_xx_subNav")
# 导出退货单 # # 导出退货单
page.ele("#file-download-button").click.to_download() # page.ele("#file-download-button").click.to_download()
file.wait_for_downloads(file_name) # file.wait_for_downloads(file_name)
return pd.read_excel(file_name, engine='xlrd') return pd.read_excel(file_name, engine='xlrd')
...@@ -57,7 +62,7 @@ def export_item_read_data(return_id): ...@@ -57,7 +62,7 @@ def export_item_read_data(return_id):
while True: while True:
try: try:
# 打开退回详情下载明细 # 打开退回详情下载明细
page.get(f"https://vendorcentral.amazon.com/katalmonsapp/vendor/members/returns/{return_id}", timeout=3) page_get(f"katalmonsapp/vendor/members/returns/{return_id}")
page.ele("#file-download-button").click.to_download(rename=file_name) page.ele("#file-download-button").click.to_download(rename=file_name)
file.wait_for_downloads(file_name) file.wait_for_downloads(file_name)
break break
...@@ -72,10 +77,11 @@ def export_item_read_data(return_id): ...@@ -72,10 +77,11 @@ def export_item_read_data(return_id):
def main(): def main():
# 读取sku映射关系 # 读取sku映射关系
relations_dict = sku_relations() relations_dict = sku_relations()
# 下载并读取list数据 # 下载并读取list数据
list_data = export_list_read_data() list_data = export_list_read_data()
print(f"共计:{len(list_data)} 订单")
new_list_data = [] new_list_data = []
i = 0 i = 0
for _, data in list_data.iterrows(): for _, data in list_data.iterrows():
...@@ -113,6 +119,12 @@ def main(): ...@@ -113,6 +119,12 @@ def main():
if __name__ == '__main__': if __name__ == '__main__':
try: try:
country = helper.get_input_with_default("国家", "usa")
if country is None:
raise Exception("请选择国家")
main() main()
except KeyboardInterrupt:
pass
except Exception as e: except Exception as e:
print(e) print(e)
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment