内置模块
random模块(随机数)
模块导入
import random
模块方法
random.random() # 生成0-1之间的随机数
random.randrange(起始值,结束值,步长) # 生成指定范围的随机数
random.choice(可迭代类型) # 从可迭代对象中随机选值
random.shuffle(有序的可迭代类型) # 打乱有序的可迭代类型
random.randint(起始值,结束值) # 生成指定范围的随机整数
random.uniform(起始值,结束值) # 生成指定范围的随机浮点数
random.sample(可迭代类型,选值个数) # 可迭代类型中随机选出指定个数值
使用实例
import random
print(random.random())#输出:0.7830205152897808
print(random.randrange(1,10,2))#输出:7
print(random.choice(['a','b','c']))#输出:a
a=[1,2,3,4,5]
random.shuffle(a)
print(a)#输出:[4, 2, 1, 5, 3]
print(random.randint(1,100))#输出:15
print(random.uniform(1,100))#输出:87.51446121807244
print(random.sample([1,2,3,4,5],2))#输出:[5, 2]
json模块(json数据处理)
模块导入
import json
模块方法
json.dumps(字典内容) # 字典转json类型
json.dump(内容,fp=f) # 字典转json类型写入文件
json.loads(json内容) # json转字典类型
json.load(fp=f) # 读取json文件成字典类型
相关内容
JSON Python
---------------------
object dict
array list
string str
number (int) int
number (real) float
true True
false False
null None
hashlib模块(字符编码)
模块导入
import hashlib
模块方法
加密类型有:md5 sha1 sha256 sha512 sha384
result=hashlib.new(‘加密类型’,加密内容.encode())
result.hexdigest()
result=hashlib.pbkdf2_hmac(‘加密类型’,加密内容,盐,加密次数)
result.digest()
base64模块(url编码)
模块导入
import base64
模块方法
result=base64.b64encode(内容.encode())
a=base64.b64decode(内容)
result=base64.urlsafe_b64encode(内容.encode())
result.urlsafe_b64decode()
time模块(日期时间)
模块导入
import time
模块方法
time.time() # 获取时间戳
time.localtime() # 获取时间元组 返回结果为时间类型
tm_min=48, tm_sec=10, tm_wday=0, tm_yday=231, tm_isdst=0)
time.strftime("%Y-%m-%d %H:%M:%S",时间类型)时间类型格式化为字符串
t=time.localtime(time.time())# 时间戳转换为时间类型
t.tm_sec 返回int型 获取秒钟
t.tm_min 返回int型 获取分钟
...
时间类型
time.struct_time(tm_year=2019, tm_mon=8, tm_mday=19, tm_hour=13, tm_min=48, tm_sec=10, tm_wday=0, tm_yday=231, tm_isdst=0)
datetime模块(日期时间)
模块导入
import datetime
模块方法
datetime.datetime.now() # 获取当前日期时间
datetime.date.utcnow() # 获取格林威治时间
时间日期.timestamp() # 时间日期转化为时间戳
datetime.datetime.fromtimestamp(时间戳) # 时间戳转化为时间日期
时间日期类型.strftime(‘%y-%m-%d %H-%M-%S’) # 日期转字符串
datetime.strptime(str,’字符串的时间格式’) # 字符串转日期
**格式化输出**
%a 缩写工作日
%A 完整的工作日
%b 缩写月
%B 全月
%c 日期和时间表示法适用于地区
%d 以十进制数表示的月份日(01 - 31)
%H 小时24小时格式(00 - 23)
%I 12小时制(01 - 12小时)
%j 以十进制数表示的年份(001 - 366)
%m 月为十进制数(01 - 12)
%M 分钟为十进制数(00 - 59)
%p 当前语言环境的上午/下午指标12小时时钟
%S 二是小数(00 - 59)
%U 一周为十进制数,周日为一周的第一天(00 - 51)
%w 工作日为十进制数(0 - 6;周日为0)
%W 一周为十进制数,周一为一周的第一天(00 - 51)
%x 当前区域设置的日期表示。
%X 当前语言环境的时间表示
%y 没有世纪的年份,如十进制数(00 - 99)
%Y 年与世纪,作为十进制数
%z,%Z 时区名称或缩写;如果时区未知,则没有字符
**自定义日期时间**
a=datetime.date(年,月,日) 打印显示2019-3-5
获取年a.year
获取月a.month
获取日a.day
a=datetime.time(小时,分,秒,毫秒)
获取小时a.hour
获取分钟a.minute
获取秒钟a.second
获取毫秒a.microsecond
a=datetime.datetime(年,月,日,小时,分,秒,毫秒)
获取年a.year
获取月a.month
获取日a.day
获取小时a.hour
获取分钟a.minute
获取秒钟a.second
获取毫秒a.microsecond
获取星期a.isoweekday()
获取年周星期a.isocalender()
获取年a.isocalender()[0]
获取周数a.isocalender()[1]
获取星期a.isocalender()[2]
**设置时间间隔**
t_interval=datetime.timedelta(weeks=0,days=0,hours=0,minutes=0,seconds=0,microseconds=0,milliseconds=0)
时间类型可以直接相减
logging模块(监控日志)
格式化输出
%(name)s Logger的名字
%(levelname)s 文本形式的日志级别
%(message)s 用户输出的消息
%(asctime)s 字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒
%(levelno)s 数字形式的日志级别
%(pathname)s 调用日志输出函数的模块的完整路径名,可能没有
%(filename)s 调用日志输出函数的模块的文件名
%(module)s 调用日志输出函数的模块名
%(funcName)s 调用日志输出函数的函数名
%(lineno)d 调用日志输出函数的语句所在的代码行
%(created)f 当前时间,用UNIX标准的表示时间的浮 点数表示
%(relativeCreated)d 输出日志信息时的,自Logger创建以 来的毫秒数
%(thread)d 线程ID。可能没有
%(threadName)s 线程名。可能没有
%(process)d 进程ID
Loging中的级别:NOTSET<DEBUG<INFO<WARNING<ERROR<CRITICAL
#实例化
logger=logging.getLogger(‘dyv’)
logger.setLevel(logging.DEBUG)
#控制台输出
sh=logging.StreamHandler()
sh.setLevel(logging.WARNING)
#写入文件中
fh=logging.FileHandler(‘logginfile.log’,encoding=‘utf8’)
fh.setLevel(logging.WARNING)
#格式化输出
formatter=logging.Formatter(
‘级别:%(levelname)s’
‘日志名:%(name)s’
‘内容:%(message)s’
‘时间:%(asctime)s’
)
sh.setFormatter(formatter)
fh.setFormatter(formatter)
#激活
logger.addHandler(sh)
logger.addHandler(fh)
logger.warning(‘error’)
os模块(文件目录处理)
模块导入
import os
模块使用
os.remove(file_dress) # 删除文件
os.rename(old,new) # 文件重命名
os.getcwd() # 获得绝对路径
os.removedirs() # 移除多级目录
os.rmdir() # 移除空目录
os.stat() # 文件状态
os.mkdir() # 创建文件夹
os.mknod() # 创建一个文本文件
os.exit() # 终止当前进程
os.listdir() # 列出目录下的全部目录和文件
os.system(“cmd”) # cmd为操作系统命令
os.path.isfile() # 是否是文件
os.path.isdir() # 是否是目录
os.path.isabs() # 是否是绝对路径
os.path.islink() # 是否是快捷方式
os.path.exists() # 文件是否存在
os.path.basename() # 根文件名
os.path.dirname() # 文件的上级目录地址
os.path.split() # 路径分割
os.path.splitext() # 分割文件后缀名
os.path.getsize() # 获取文件字节大小
os.path.join(m,n) # 文件目录拼接
shutil模块(文件目录处理)
模块导入
import shutil
模块方法
shutil.copyfile(oldfile,newfile) # 文件复制
shutil.copytree(oldfile,newfile) # 文件目录复制
shutil.copy(oldfile,newfile/newtree)# 文件/文件目录复制
shutil.move(oldfile,newfile) # 文件移动
shutil.rmtree() # 空目录、有内容的目录都可以删
shutil.chdir() # 文件目录改变
第三方模块
pyttsx3模块(语音播报)
模块导入
import pyttsx3
模块方法
#实例化
engine = pyttsx3.init()
#语音播报内容
engine.say('你好')
#事假队列执行完毕后返回None
engine.runAndWait()
rate = engine.getProperty('rate')
#获取播报速度
volume = engine.getProperty('volume')
#获取播报音量
voices = engine.getProperty('voices')
#获取播报发音
v=engine.getProperty('voices')[1]
#设置播报速度
rate = engine.setProperty('rate','150')
#设置播报音量
volume = engine.setProperty('volume','1')
#设置获取播报发音
voices = engine.setProperty('voices',v)
使用实例
import pyttsx3
def get_content(dress):
with open(dress) as f:
data=f.read()
return data
engine = pyttsx3.init()
engine.say(get_content('文本文件地址'))
engine.runAndWait()
schedule模块(定时任务)
模块导入
# 安装模块
pip3 install schedule
# 导入模块
import schedule
模块方法
# 按每秒/分/小时/天的定时任务 job为函数名
schedule.every().second.do(job) # 每秒钟执行一次
schedule.every().minute.do(job) # 每分钟执行一次
schedule.every().hour.do(job) # 每小时执行一次
schedule.every().day.do(job) # 每天执行一次
#指定具体时间
schedule.every().day.at("10:30") # 每天10:30执行一次
# 按多秒/分/小时/天的定时任务
schedule.every(2).seconds.do(job) # 每2秒钟执行一次
schedule.every(2).minutes.do(job) # 每2分钟执行一次
schedule.every(2).hours.do(job) # 每2小时执行一次
schedule.every(2).days.do(job) # 每2天执行一次
# 按星期指定执行的定时任务
schedule.every().monday.do(job) # 每个星期一执行一次
schedule.every().tuesday.do(job) # 每个星期二执行一次
schedule.every().wednesday.do(job) # 每个星期三执行一次
schedule.every().thursday.do(job) # 每个星期四执行一次
schedule.every().friday.do(job) # 每个星期五执行一次
schedule.every().saturday.do(job) # 每个星期六执行一次
schedule.every().sunday.do(job) # 每个星期天执行一次
#指定具体时间
schedule.every().friday.at("10:30").do(job)# 每个星期五10:30执行一次
使用实例
#-*-encoding:utf-8-*-
#定时任务与多线程结合使用
import schedule
import threading
import time
def job():
print('this is job!')
def task1():
schedule.every().second.do(job)
def task2():
schedule.every().minute.do(job)
def run():
tk1=threading.Thread(target=task1).start()
tk2=threading.Thread(target=task2).start()
run()
while True:
schedule.run_pending()
time.sleep(1)
selenium模块(浏览器自动化)
安装模块:pip install selenium
from selenium import webdriver
浏览器驱动配置选项
#实例化驱动配置
options = webdriver.ChromeOptions()
#设置为开发者模式,防止被各大网站识别出来使用了Selenium
options.add_experimental_option('excludeSwitches', ['enable-automation'])
#浏览器设置为不加载图片数据
options.add_experimental_option("prefs", {"profile.managed_default_content_settings.images": 2})
#禁止浏览器弹窗
options.add_experimental_option('prefs',{'profile.default_content_setting_values':{'notifications' : 2}})
#实例化浏览器传入驱动地址和驱动配置参数
browser = webdriver.Chrome(executable_path=r'D:\软件包\Chrome\Application\chromedriver.exe',options=options)
浏览器无界面模式
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
chrome_opt = Options() # 创建参数设置对象.
chrome_opt.add_argument('--headless') # 无界面化.
chrome_opt.add_argument('--disable-gpu') # 配合上面的无界面化.
chrome_opt.add_argument('--window-size=1366,768') # 设置窗口大小, 窗口大小会有影响.
browser = webdriver.Chrome(executable_path=r'D:\软件包\Chrome\Application\chromedriver.exe',options=chrome_opt)
browser.get('http://www.baidu.com')
print(browser.title)
浏览器驱动设置
#网络设置
browser.set_network_conditions( offline=False,
latency=5, # additional latency (ms)
download_throughput=500 * 1024, # maximal throughput
upload_throughput=500 * 1024) # maximal throughput)
#窗口大小
browser.set_window_size(600,900)
#浏览器位置
browser.set_window_position(0,0)
#同时设置浏览器位置和大小
browser.set_window_rect(0,0,600,900)
#页面加载超时报错时间
browser.set_page_load_timeout(5)
#脚本执行超时报错时间
browser.set_script_timeout(8)
获取相关信息
browser.page_source#获取网页源代码
browser.name#获取浏览器名称
browser.current_url#获取当前网页url
browser.title#获取网页的标题
browser.window_handles#获取当前会话中所有窗口的句柄
browser.application_cache#获取应用缓存地址
browser.capabilities#获取主要的功能设置
browser.command_executor#代表远程服务的url
browser.get_window_size()#获取窗口大小
browser.get_window_position()#获取窗口位置
browser.get_window_rect()#获取窗口位置和大小
browser.get_screenshot_as_base64()#捕获屏幕图片为base64格式信息
browser.get_screenshot_as_file('图片名.png')#捕获屏幕保存为图片
浏览器普通按钮操作
browser.get('http://www.baidu.com')#获取网页
browser.refresh()#网页刷新
browser.forward()#前进
browser.back()#后退
browser.click()#单击
browser.submit()#提交表单
browser.send_keys()#输入字符串
browser.close()#关闭当前页面
browser.quit()#关闭浏览器
浏览器特殊按钮操作
# 要使用按键值, 需要导入下面keys.
from selenium.webdriver.common.keys import Keys
elem.send_keys(Keys.CONTROL, 'c')
定位元素
#使用 class值 定位
browser.find_element_by_class_name('class_name_value')
#使用 name值 定位
browser.find_element_by_name('name_value')
#使用 id值 定位
browser.find_element_by_id('id_value')
#使用 xpath表达式 定位
browser.find_element_by_xpath('//div[@id='1']')
#使用 css选择器 定位
browser.find_element_by_css_selector('#p')
#使用 链接文本 定位
browser.find_element_by_link_text(‘更多热点’)
#使用 链接部分文本 定位
browser.find_element_by_partial_link_text(‘更多’)
#通用方法定位
#By.ID
#By.TAG_NAME
#By.CLASS_NAME
#By.NAME
browser.find_element(By.ID,'id_value')
操作被定位元素
b=browser.find_element_by_class_name('search-box-btn')
b.text#获取文本值
b.location#获取定位坐标
b.id#获取id值
b.tag_name#获取标签名
b.size#获取元素长宽
b.parent#获取网页来源session
b.rect#获取坐标位置和元素长宽
b.screenshot_as_png#获取元素截图png二进制数据
窗口操作
js = 'window.open("http://www.baidu.com");' #打开新窗口
browser.execute_script(js)#执行js代码