【python常用办公自动化总结】openpyxl、selenium

好记性不如烂笔头

准备:

安装python第三方包

  • 由于公司有代理,所以:pip install --proxy=http://proxyhost:port packageName
    之前也由于没配置pip的path,导致导包需要用"python -m pip install"

安装版本一致的webdriver

  • 谷歌:https://sites.google.com/a/chromium.org/chromedriver/downloads
  • 配置path——加入下载的webdriver的位置。

代码:

常用包

#!/usr/bin/env python
# coding=utf-8
import os
import shutil
import datetime
import time

from openpyxl import Workbook, load_workbook
from openpyxl.styles import PatternFill
from openpyxl.styles.borders import Border, Side
from openpyxl.utils import get_column_letter

from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys

常用命令

os系&其他
# 等待0.1秒
time.sleep(0.1)
# 时间获取与格式化
datetime.datetime.now() + datetime.timedelta(days=14)).strftime("%m-%d")
# 获取当前路径
os.getcwd()

# 文本操作(如果文件不存在则新建)
# 'a':追加,指针在文末。
# 默认是'r':只读。
# 'w':写入,覆盖。
# 'w+':读写,覆盖。
# 'a+':读写,追加。
with open(file, 'a', encoding='utf-8') as f:
       f.write("user", "Time" + '\n')
# 判断文件是否存在
if os.path.exists(oldFile):

# 移动文件。os库无法移动至不同磁盘。
shutil.move(oldPath, newPath)

# 差集:listNew里面有,listOld里面没有。
listDiff = set(listNew) - set(listOld)
# 删除list里的空元素
sheet = [x for x in dumSheet if x != []]
openpyxl
# ExcelLife
# 新建Excel
wb = Workbook()
# 读取Excel
file = "xxx/xxx/xxx.xlsx"
wb = load_workbook(file)

# 获得所有sheet的名称
print(wb.sheetnames)
# 选择当前sheet
ws = wb.active
# 根据sheet索引获得sheet
ws = wb.worksheets[0]
# 根据sheet名字获得sheet
ws = wb['sheet']
# 改变sheet名
ws.title = todayMMYY

# 获取最大行、列数
maxRow = ws.max_row
maxColumn = ws.max_column
# 获取指定行的cell
cells = sheet[1]
cells = sheet[1:3]
# 获取指定列的cell
cells = sheet['A']
cells = sheet['A:C']
# 获取cell的值:"cell.value",行列(i, j)
ws.cell(i, j).value
# 例
# 获取第一行的值(表头),确定“学生ID”列的索引
headers = [cell.value for cells in ws[1]]
colID = [headers.index("学生ID")][0]
# 获取第一列的值存进list(慢方法?)
mylist = [cell.value for cell in list(ws.columns)[0]]
# 获取多行单元格的值的时候,注意多层嵌套的元组(rows[0]),否则总是报错【AttributeError: 'tuple' object has no attribute 'value'】
rows = [cell for cell in ws[1:2]]
print(rows[0].value, rows[1].value)

# 列表解析————过滤器,过滤元素"None" & 去掉字符串中间的空格
dum = [str(cell.value).replace(' ', '') for cell in list(ws.columns)[1] if cell.value is not None]

# 改变A1单元格的值
ws['A1'].value = "番号" + todayMMYY


# 一些设定。列宽,填充色,边框。
colWidth = [12, 27, 50, 10, 10, 10, 20, 20, 30, 6]
setFill = PatternFill("solid", fgColor="6495ED")
setBorder = Border(left=Side(style='thin'),
                    right=Side(style='thin'),
                    top=Side(style='thin'),
                    bottom=Side(style='thin'))
         
# 遍历表格行列,应用设定
for i in range(1, ws.max_row+1):
    for j in range(1, ws.max_column+1):
        ws.cell(i, j).fill = setFill
        ws.cell(i, j).border = setBorder 
                   
# 遍历每列,应用设定好的列宽。
# 注意!openpyxl是从1开始。range()左闭右开。
for i in range(1, ws.max_column+1):
    ws.column_dimensions[get_column_letter(i)].width = colWidth[i-1]
    
# 保存为&关闭
wb.save(file)
wb.close()
selenium
# webdriver设置。不显示无用log、关闭右上角提示。
options = webdriver.ChromeOptions()
prefs = {"":""}
prefs["credentials_enable_service"] = False
prefs["profile.password_manager_enabled"] = False
options.add_experimental_option("prefs", prefs)
options.add_experimental_option('excludeSwitches', ['enable-automation', 'enable-logging'])
driver = webdriver.Chrome(chrome_options=options)

# 访问url
url = ""
#设置隐式等待,就不用"time.sleep()"了
driver.implicitly_wait(10)
driver.get(url)

# 基本操作
# 通过id定位,写入文本,全选,点击。
# 通过css选择器定位。据说css选择器比xpath效率高
driver.find_element_by_id("userNameInput").send_keys(username)
driver.find_element_by_id("rules").send_keys(Keys.CONTROL + 'a')
driver.find_element_by_id("submitButton").click()
driver.find_element_by_css_selector("")
# 底层。简单方式
driver.find_element("id","userNameInput")
driver.find_element("css selector","  ")

# 有时发生定位失败的情况,可看看web是否用的iframe等
driver.switch_to_frame("gsft_main")

# 连锁事件
# 实例化
menu = ActionChains(driver)
# 右键.键盘控制菜单选项.perform()释放连锁动作
# menuLoc = driver.find_element_……。定位右键的位置。
menu.context_click(menuLoc).send_keys(Keys.UP).send_keys(Keys.RIGHT).send_keys(Keys.ENTER).perform()

# 关闭webdriver
# 关闭webdriver软件。(似乎不写则默认进行?)
driver.quit()
# 关闭tab窗口
driver.close()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值