好记性不如烂笔头
准备:
安装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()