文 | SSW
來源:Python 技術「ID: pythonall」
阿裡雲產品費用巡檢,一般流程是登錄賬號,再逐項核對填寫。雖然簡單,但如果帳號多表格多,帳號間的數據有關聯,填寫起來就比較費力氣。幾張表格,可能從下載數據到核寫完畢,輾轉半個小時。
因此在保留excel原文件格式不變的基礎上,自動填寫相關數值變得重要。
python操作excel的模塊多,xlrd,pandas,xlwings,openpyxl
。經常搞不清這麼多功能類似的模塊有什麼區別,這裡發現xlwings可以派上用場,因為我有個保留excel格式的需求,文件格式:
表1-1
注意:主要修改第10、11行,其它不變。
通過爬蟲登錄阿裡雲,下載數據寫入csv。帶上日期,如data_07-25.csv
表1-2
爬蟲腳本
# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time,os,glob,csv
from datetime import datetime
options = Options()
options.add_argument('--disable-infobars')
options.add_argument('--incognito')
# options.add_argument('--headless')
bro = webdriver.Chrome(executable_path='C:\drf2\drf2\chromedriver.exe', chrome_options=options)
bro.maximize_window()
bro.get('https://www.aliyun.com/')
bro.implicitly_wait(10)
#點擊首頁的登錄按鈕
bro.find_element_by_xpath('//*[@id="J_3207526240"]/div/div/div[1]/div[2]/div[2]/a[4]').click()
time.sleep(1)
#點擊RAM用戶
bro.find_element_by_xpath('//*[@id="root"]/div/div[2]/div/div[2]/div[1]/div[2]/div[2]/div/div[2]/div[2]/span/div').click()
u = bro.find_element_by_xpath('//*[@id="--aliyun-xconsole-app"]/div[1]/div[2]/div/div/div[1]/div[2]/div/div/div[2]/div/div/div/form/div[1]/div[2]/div[1]/span/input')
#用戶名
u.send_keys('')
time.sleep(5)
#點擊下一步
bro.find_element_by_xpath('//*[@id="--aliyun-xconsole-app"]/div[1]/div[2]/div/div/div[1]/div[2]/div/div/div[2]/div/div/div/form/div[5]/button/span').click()
p = bro.find_element_by_xpath('//*[@id="--aliyun-xconsole-app"]/div[1]/div[2]/div/div/div[1]/div[2]/div/div/div[2]/div/div/div/form/div[2]/div[2]/span/input')
#密碼
p.send_keys('')
time.sleep(5)
# 點擊登錄按鈕
bro.find_element_by_xpath('//*[@id="--aliyun-xconsole-app"]/div[1]/div[2]/div/div/div[1]/div[2]/div/div/div[2]/div/div/div/form/div[5]/button/span').click()
time.sleep(3)
# 點擊控制台
bro.find_element_by_xpath(
'//*[@id="J_3207526240"]/div/div/div[1]/div[2]/div[2]/a[3]').click()
time.sleep(6)
#切換窗口
bro.switch_to.window(bro.window_handles[-1])
# 點擊費用
bro.find_element_by_xpath(
'/html/body/div[1]/div/div/nav/div[1]/a').click()
time.sleep(3)
bro.switch_to.window(bro.window_handles[-1])
available_credit = bro.find_element_by_xpath('//*[@id="app__home"]/div/div/div/div[2]/div[1]/div[1]/div[2]/div/div[1]/span[1]/span').text
time.sleep(3)
#點擊帳單詳情
bro.find_element_by_xpath(
'//*[@id="root-app"]/div[1]/div/div[6]/div[3]/a').click()
time.sleep(1.5)
#點擊產品量價匯總
bro.find_element_by_xpath(
'//*[@id="app__ent-expense"]/div/div/div[1]/div[1]/div/div/div/ul/li[4]/div/span').click()
time.sleep(1.5)
trs = bro.find_elements_by_xpath('//tbody/tr[position()> 1]')
for f in os.listdir('C:/Users/Administrator/Desktop/費用巡檢/'):
if f.startswith('fee'):
os.remove('C:/Users/Administrator/Desktop/費用巡檢/%s' % f)
with open('C:/Users/Administrator/Desktop/費用巡檢/fee_%s.csv' % datetime.now().__format__('%m-%d'), 'a+', newline='', encoding='gb18030') as f:
f_csv = csv.writer(f)
f_csv.writerow(['可用額度',available_credit.split(' ')[1]])
for tr in trs:
tr = tr.text.split('\n')
f_csv.writerow([tr[0],tr[1].split(' ')[1]])
bro.quit()
表1-2
的數據為了方便識別,變量名直接用中文了
import pandas as pd
df = pd.read_csv('data_%s.csv' % datetime.now().__format__('%m-%d'), encoding='gbk', names=['內容', '金額'])
內容安全 = eval(df.iloc[5, 1])
系統短信 = 0
雲服務器ECS流量 = eval(df.iloc[4, 1])
對象存儲 = eval(df.iloc[8, 1])
文件存儲 = eval(df.iloc[6, 1])
視頻點播 = eval(df.iloc[11, 1])
大數據 = eval(df.iloc[2, 1]) + eval(df.iloc[7, 1])
CDN = eval(df.iloc[1, 1])
日志服務 = eval(df.iloc[10, 1])
塊存儲 = eval(df.iloc[3, 1])
合計 = round(內容安全 + 系統短信 + 雲服務器ECS流量 + 對象存儲 + 文件存儲 + 視頻點播 + 大數據 + CDN + 日志服務 + 塊存儲, 2)
余額 = eval(df.iloc[0, 1].replace(',', ''))
表1-1
sheetimport xlwings as xw
from datetime import datetime
import os
app = xw.App(visible=False,add_book=False)
app.display_alerts = False
app.screen_updating = False
wb = app.books.open(filename)
ws = wb.sheets[0]
表1-1
數據# 修改第10行,expand參數可以方便的按順序一行寫完
ws.range('B10').options(expand='table').value = [內容安全, 系統短信, 雲服務器ECS流量, 對象存儲, 文件存儲, 視頻點播, 大數據, CDN, 日志服務, 塊存儲, 合計,
余額]
# 修改第11行
ws.range('e41').value = '本月(%s月)已使用%s元,實際賬戶余額為%s元。' % (datetime.now().month, 合計, 余額)
path = 'D:/桌面/巡檢/%s' % datetime.now().__format__('%m-%d')
if not os.path.exists(path):
os.mkdir(path)
wb.save(os.path.join(path,'教育費用_%s.xlsx' % datetime.now().__format__('%m-%d')))
wb.close()
app.quit()
通過使用xlwings自動修改表格,我的6張表格從原先的操作半小時,到現在鼠標duang~duang~duang~幾下即可做好。減少上百次的復制粘貼點擊後,工作更輕松了。
本文是由 Python技術 公眾號粉絲 SSW 投稿,歡迎大家繼續踴躍投稿!
PS:公號內回復「Python」即可進入Python 新手學習交流群,一起 100 天計劃!
老規矩,兄弟們還記得麼,右下角的 “在看” 點一下,如果感覺文章內容不錯的話,記得分享朋友圈讓更多的人知道!
【神秘禮包獲取方式】
識別文末二維碼,回復:1024