第一种
python -m install pip --upgrade pip
第二种
python -m pip install -u --force-reinstall pip
第三种
pip install --user -- upgrade pip
第四种
python -m pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple/
数值类型
整数和小数 int和float
注释 用#或者选中 ctrl+/
#整数 1,2,3,4 int类型 type()知道是什么类型的函数
print(1)
print(type(1))
#小数 3.14 float 浮点型
print(3.14)
print(type(3.14)) #精度最长是16位 小数点显示是不准的
#运算
print(1+1)#加法
print(5-2)#减法
print(2*3)#乘法
print(2**3)#乘方
print(1/3)#除法 除出来一定是float类型
print(4/2,type(4/2))
print(round(1/3,2))#round函数是保留几位小数
print(5//3)#取整 什么除以什么=商 … 余数
print(5%3)#取余
#混合运算 有括号算括号里的 先算乘除后算加减 #字面量 字面意义上的量 #变量是可以改变的量 给对象起了个名字 如name='小明' #命名规范 #1由字母数字下划线组成,开头不能是数字,一般是字母 #2不能与内置函数或者关键字相同 #3变量赋值什么类型就是类型
name=1
print(type(name))
#4见名知意 #5可以汉字命名,一定不用 比较low #哪些关键字
import keyword
print(keyword.kwlist)
a a_4 a-5 _s 5_a 3,5不符合变量命名
name='小明'
print(name)
name='小王'
print(name)
a=1
b=8
a+=b#a=a+b
print(a)
#加减乘除同理可得 #2字符串 str 单引号 双引号 三引号 成对出现
name='''小明'''
print(type(name))
#三引号可以换行 单双引号不可以
name='''今天天气
很好'''
print(name)
#print('hello'+'world')#+字符串拼接 注意 一定是同种字符串类型
print('hello'+1)#不是字符串不能一起玩
print('hello'*3)#字符串重复
#索引 字符串[索引位置] 正数从0 1 2 3 …… 倒数 -1 -2 -3
name='jack'
print(name[1],name[-3])
print(name[4])#超过长度报错IndexError: string index out of range
#切片 取一段 变量[start:end] 左含右不含
hoby='i like music'
#关键词'hoby'切片索取
print(hoby[2:6])#取like
print(hoby[:])#取全部
print(hoby[7:])#取music
print(hoby[:6])#取i like
#3列表 list [] 里面存放任意数据类型 有些像数组 可以增删改操作 #alist=[]空列表
alist=[1,3.2,'小明',[1,2,3]]
#关键词‘list’列表
#关键词'alist'空列表
print(type(alist))
#关键字‘type’类型
#可以切片和索引操作
print(alist[1])
print(alist[:2])#取[1,3.2]
print(alist
#4元组 tuple 和列表的区别 元组不可以增删改 可以索引和切片操作,传任意类型
a=()
#一个元素的元组
b1=(1,)
b2=(1)
print(type(b1),type(b2))
tuple1=(1,2,3,4)
print(tuple1[1:3])#取(2,3) #关键字‘tuple’元组
print(tuple1[-1])#取4
#5字典 dict 键值对 {key:value} 不能索引和切片 key是不可改变数据类型(字符串,数值,元组),value是任意的类型 字典是可以增删改
dict1={(1,2,3):1,'name':'小明'} #关键字’dict‘字典
print(dict1,type(dict1))
str1="susan"
获取:ssn
print(str1[0]+str1[2]+str1[-1])#索引+拼接
#切片+步长(偶数)
#回顾 python环境搭建 jdk python pycharm #字面量 变量 数据类型 :整型 浮点型 字符串 列表 元组 字典
#布尔类型 True False 非真及假 bool #布尔表达式 验证式子 是对的还是错的 == 等于 >大于 >=大于等于 <小于 <= 小于等于 !=不等于
print(1==1)
print(3>4)
#in 前者在后者里面 。。。in。。 not in 前者不在后者里面
alist=[1,2,3,4,[7,8,9]]
print(1 in alist)#True
print(7 in alist)#返回False 因为[7,8,9]是个整体
print(7 in alist[4])
print(7 not in alist)
#任何类型 非0或非空 bool类型都是True 0和空是False bool函数看 #注意:空格和空不是一个概念
print(bool(' '))
#且 and 布尔表达式 and 布尔表达式 一假则假 全真则真 同时满足为真
print(4<3 and 7>4)#False
print(3>2 and 7>6)#True
#或 or 布尔表达式 or 布尔表达式 一真则真 全假则假 两个满足其中一个 就返回True
print(4<3 or 7>4)#True
print(3>2 or 7>6)#True
print(3<2 or 7<4)#False
#and和or 同时出现 and的优先级高于or
print(4>2 and 8<4 or 1==1)#true
#条件判断 #if 如果 if 布尔表达式:换行底下是缩进 布尔表达式为真的时候才会运行if里面的代码 #见到:下面就要有缩进 自动有tab键缩进 不是必须tab键距离 tab相当于四个空格
password=123456
if password==3456:
print('密码正确')
print('hello')
#if ...else 如果…… 否则…… 两个对立面 if和else里只会执行一个
password=123456
if password==12456:
print('密码正确')
else:
print('密码错误')
#多分支 判断条件 if ……elif……elif……else #elif几个都可以 else可选项 #input 和控制台交互 input接收的是字符串类型
grade=int(input('请输入你的分数:'))
print(type(grade))
if grade>=85:
print('A等级')
elif 70<=grade<85:
print('B等级')
elif 60<=grade<70:
print('C等级')
else:
print('D等级')
# #if 嵌套 if里套if
username=input('请输入用户名')
#
if username=='小明':
print('用户名正确')
password=input('请输入密码')
if password=='123456':
print('密码正确 登录成功')
else:
print('密码错误 请重试')
else:
print('用户名错误')
#while循环 while 条件表达式 : 回车代码块 满足表达式(为真的时候)的时候进入循环体 当不满足的时候 退出循环
#打印1-10
i=1
while i<=10:
print(i)
i+=1#i=i+1
#2打印1-100的和 1+2+3+4+……+100 总和 前面的总和+现在的count值
sum_data=0#和的初始值
count=1
while count<=100:
sum_data+=count #sum_data=sum_data+count # sum_data=0+1 sum_data=1+2 sum_data=1+2+3+……100
count+=1#count=count+1 count =1+1 count=2+1
print(sum_data)
#3斐波那契数列 后一项是前两项的和 0 1 1 2 3 5 8……
i=0
j=1
while i<1000:
print(i,end='\t')
i,j=j,i+j
#\t代表制表符 相当于四个空格 按住ctrl点print函数可以看到默认end='\n'
a,b=4,4+1# 4赋值给a 4+1赋值给b
print(a,b)
#死循环 一定是bug吗? 不一定的 比如登录
#for循环 for 变量 in 列表(元组 ,字典字符串) 遍历
alist=['小王','小红','小明']
for one in alist:
print(one)
print(len(alist))#len函数取长度
i=0
while i<len(alist):
print(alist[i])
i+=1
#for循环 实现1-100的和 range()左含右不含 里面也有步长 #range
for one in range(1,10):
print(one)
sum_data=0
for i in range(1,101):
sum_data+=i
print(sum_data)
#步长
for one in range(1,11,2):
print(one)
#使用场景 while你不知道循环次数 知道循环次数 for
#break是结束本层循环 continue是结束本次循环 注意 :break和continue同级有代码不执行
alist=['小王','小红','小明']
for one in alist:
if one=='小红':
break
print(one)
for one in alist:
if one=='小红':
continue
print(one)
while True:
username=input('输入用户名')
password=input('输入密码')
if username=='zege' and password=='123':
print('账户正确,登录成功')
break
else:
print('用户名或密码错误')
#多行注释: ############################### #下面是求和的代码 ############################### ''' 下面是求和的代码
#1函数 : 把一系列动作打包在一起 例如 :登录 1打开浏览器 2 输入网址 3 输入用户名和密码 4点击登录按钮 #def 定义函数 def 函数名(): 缩进 函数的作用 : 偷懒 #注意:函数 一定先定义 后调用
def login():
print('1打开浏览器')
print('2 输入网址')
print('3 输入用户名和密码')
print('4点击登录按钮 ')
#调用函数 函数名()
login()
#1-100的和 封装函数 缩进 选中按tab键
def sum(start,end,step):#定义一个变量放到函数里 给函数一个参数 start函数的形参 形式的参数 定义多个
'''
#
:param start: 初始值
:param end: 结束值
:param step: 步长
:return:返回总和
'''
sum_data=0
count=start
while count<=end:
sum_data+=count
count+=step
# print(sum_data)#只是打印,调用的时候只是打印一下 做不了其他操作
return sum_data,True,[1,2,3]
#
sum(5)#5函数的实参 调用的时候要一一对应
sum(1,200)
sum(1,100,2)#1-100的奇数和
#return 返回值 如果想对函数调用完再进行其他操作的时候 返回多个值 拼接成元组 #
a=sum(1,100,2)
print(a[0])#用索引去取值
#max最大值 min 最小值
print(max([1,2,5,4,2]))
print(min([1,2,5,4,2]))
print(max((1,2,5,4,2)))
a=1
print(str(a),type(str(a)))#把整型1 转换字符串的'1'
print(int('1')+1)#把字符串的'1' 转换 整型1
#对象方法 #1 str.join(列表) 注意 列表里的字符串 列表-字符串
alist=['i','like','music']
print('♥'.join(alist),type('**'.join(alist)))
#2 字符串-列表 字符串.split('')切割
str1='i like music'
alist=str1.split(' ')
print(alist)
alist=str1.split('1')
print(alist)
#3 去空格 str.strip()去两边空格
str1=' i like music '
print(str1.strip())
print(str1.lstrip())#去左边空格
print(str1.rstrip())#去右边空格
#4 replace 替换 str.replace('旧的','新的')
str1=' i like music '
print(str1.replace('music','mm'))
print(str1.replace(' ',''))
#列表操作 #1增加 append 向后追加 只跟一个元素
alist=[1,2,3,4]
alist.append('mm')
print(alist)
#2两个列表合并成一个列表
alist1=[1,2,3]
alist2=[4,5,6]
#目标 alist1=[1,2,3,4,5,6] extend
print(alist1+alist2)
alist1.extend(alist2)
#print(alist1) #3插入操作 insert(索引,值) 值任意类型
alist1=[1,2,3]
alist1.insert(1,5)#在2的前面插入5
print(alist1)
#4删除操作
alist1=[1,2,3]
#① del 列表[索引] 删除1
del alist1[0]
print(alist1)
#② pop 列表.pop(索引) 有返回值
a=alist1.pop(0)
print(alist1)
print(a)
#③ remove 列表.remove(元素值) 没有返回值
a=alist1.remove(1)
print(alist1)
print(a)
#修改 列表[索引]=修改的值
alist1[1]=5
print(alist1)
#查 list[索引值]
#字典的操作
dict1={'name':'小明','age':18}
#1增加 字典['不存在的键']=值
dict1['height']=180
print(dict1)
#2修改 字典['存在的键']=修改的值
dict1['name']='小王'
print(dict1)
3 删除 del 字典['键']
del dict1['age']
print(dict1)
#4查 字典['键']
print(dict1['name'])
#什么是模块? 模块就是一个.py文件 把同一类型的需要的放在一起 #什么是包?模块的结合 新建包的 new-python package 创建包 里面有int.py文件 #如何导入模块 在当前模块里用其他模块的函数 #1同一包导入模块 import
import hello #虽然有红色波浪线 没有关系 导入就把模块从上到下执行一遍
#调用函数 模块.函数()
# hello.smile()
#2不同的包里导入模块 from 包名 import 模块名 调用 模块名.函数()
from homework import login #没使用到的时候是灰色 ,使用到会高亮
login.yase()
#3不同的包导入相同模块名的模块 就近原则
from homework import login as login1 #as起个别名 调用使用别名去调用
from login_page import login as login2
#
login1.yase()
login2.login('zege',123456)
#4导入多个模块 中间用,隔开
from homework import login,really
import hello
login.yase()
really.rap()
hello.smile()
#5只想导入一个函数 from 包名.模块名 import 函数名 调用 函数名()
from homework.really import test1
test1()
#库 就是把一类事物放一起 selenium ui自动化 requests 接口自动化 别人做好的 #安装第三方库 cmd 运行 pip install 库名 install.bat编辑 pip install 库名 django #pip install selenium 验证 查看你安装的第三方库 pip list #报错 1 time out 豆瓣源安装 pip install 库名 -i https://pypi.douban.com/simple/ #pip install 库名 -i https://pypi.douban.com/simple/ --trusted-host pypi.douban.com #2 pip 不是内部或外部指令 原因:环境变量没有配置 #3 winerror5 需要cmd以管理员身份运行 #注意实现 新建的包和模块名不能与第三方库或者内置函数 关键字相同 如selenium python webdriver chrome^ #更新 pip install 库名 -U
#算法 倒叙排列
alist = [5,8,6,9,3,4,8,9,5,1,4,2] #定义了一个列表
# list_len = len(alist)#求列表的长度 12
# l_len = list_len//2#除以2取整 6
# for i in range(l_len):
# alist[i],alist[list_len-1-i] = alist[list_len-1-i], alist[i]
# # 先计算 alist[i]= alist[list_len-1-i] alist[list_len-1-i]=alist[i]
# #1循环 i=0 alist[0]=2 alist[12-1-0]取的值是2 alist[12-1-0] alist[11]= 5 list[0]的值
# #2循环 i=1 alist[1]=4 alist[10]=8
# # print(alist)
# print (alist)
#alist.reverse() 实现这个算法
print(alist)
#冒泡排序 实现的是从小到大的顺序 实现原理 当前索引的值跟后面的值去比较
alist=[3,4,6,7,5,2,1]
list_len=len(alist)#长度
for i in range(list_len - 1): #建立一个循环 (0,6) i=0
for j in range(i,list_len): #循环 range(0,7) j= 0,1,2,3,4,5,6
if alist[i] > alist[j]: # alist[0] > alist[0] alist[0] > alist[1] alist[0] > alist[2]……
alist[i],alist[j] = alist[j],alist[i]# alist[0]= alist[5]的值是2 alist[5]=alist[0]的值3
print(i)
print(j)
print(alist)
#
print (alist)
''' 下面的serverLog变量记录了松勤VIP云服务器上 当天完成Mysql作业不同班级学生的成绩 每一行表示一个学员的信息,其中第一列是日期,第二列是班级,第三列是学生名,第四列是成绩 (列之间都是制表符) '''
serverLog ='''
2019-02-18 20:12:27 82期 liuyang 90
2019-02-18 00:15:00 84期 yangxue 73
2019-02-18 11:12:27 81期 zhufeng 69
2019-02-18 22:10:07 81期 liuli 100
'''
alist=[]#存储 [[期数,分数,人数],[期数,分数,人数]……]
#1提取每一行信息
relist=serverLog.split('\n')
del relist[0],relist[-1]
print(relist)
#2取出期数和分数
#循环遍历出每一行数据 ,再用\t去切割 索引去取期数 和 分数
for one in relist:
# print(one)
templist=one.split('\t')
print(templist)
classstr=templist[1]#取期数
score=int(templist[-1])#取成绩
#进行统计和分类:存放列表里[期数,总分,人数]
#期数一样的,分数相加,人数+1 ,不一样的追加到alist列表里
flag=False#设置个标志位 控制的作用
for i in alist:
print(i)
if i[0]==classstr:#判断 期数是否存在列表里
i[1]+=score
i[2]+=1
flag=True
if flag==False:
alist.append([classstr,score,1])
print(alist)
print(alist)
#3求平均值
for a in alist:
print(a[0],f'平均分是{a[1]/a[-1]}')#求平均数 总分除以人数
a=1 print(f'这是a的值{a}') print('这是a的值%s'%a)
#python+selenium ui自动化环境搭建 #1python 2pycharm 3chrome浏览器 4 对应浏览器驱动 5selenium库 pip install selenium #浏览器和搜索引擎的区别? 浏览器的exe文件 是一个程序 搜索引擎 : 请求服务器 查找资源 google服务器 在国外的不对中国提供服务了 #google搜索引擎搜索是搜索不到 #注意事项 :一定驱动跟浏览器版本要匹配 #如何查看浏览器版本?打开chrome浏览器 -点三个点-帮助-关于google chrome 查看版本信息 #下载对应驱动 http://npm.taobao.org/mirrors/chromedriver/ 不用安装 解压即可 下载最近的版本 win32zip #注意 关闭杀毒软件 #放位置?1.自定义目录中 放哪里都可以 不要放中文路径 最好不要有中文2 放到python目录里 #验证
from selenium import webdriver
# driver=webdriver.Chrome()#驱动放在python目录中的时候
#自定义驱动路径
driver_path='E:\seleniumdriver\chromedriver.exe' #自定义路径
driver=webdriver.Chrome(driver_path)
driver.get('https://www.baidu.com')
from selenium import webdriver
import time
driver=webdriver.Chrome()
driver.get('https://www.baidu.com')#访问url 页面
#1通过id定位
driver.find_element_by_id('kw').send_keys('松勤')#找到id属性值为kw的元素 输入松勤 id属性是唯一的
#2 通过name属性去定位
driver.find_element_by_name('wd').send_keys('松勤')#找到name属性值为wd的元素 输入松勤
#3 通过class去定位
driver.find_element_by_class_name('s_ipt').send_keys('松勤')#send_keys()输入
driver.find_element_by_class_name('s_btn').click()#class定位的时候 class的值如果有空格 要把空格前面的地方删掉click()点击
#4通过tag去定位 通过标签 element和elements的区别 element返回的是单数元素对象 elements返回的是一个对象列表
templist=driver.find_elements_by_tag_name('input')
for one in templist:
if one.get_attribute('class')=='s_ipt':#get_attribute('name')获取name的属性值
one.send_keys('松勤')
#5通过超链接文本去定位 一般是a标签 href接的是链接地址
driver.find_element_by_link_text('新闻').click()
#6通过部分超链接文本 有点像模糊查询, 如果有两个一样的 优先匹配第一个
driver.find_element_by_partial_link_text('闻').click()
#获取标题
titletext=driver.title
print(titletext)
#最大化窗口
driver.maximize_window()
#测试用例 打开百度 输入松勤 点击百度一下 跳出显示有松勤网-松勤软件测试文字
driver.find_element_by_class_name('s_ipt').send_keys('松勤')#send_keys()输入
driver.find_element_by_class_name('s_btn').click()
time.sleep(3)#延时 有可能 页面还没渲染成功 你去定位了 会报错
res=driver.find_element_by_id('1')
print(res.text)#打印标签里的文本信息
if res.text.startswith('松勤网 - 松勤软件测试'):#以松勤网 - 松勤软件测试开头
print('测试用例001通过')
else:
print('测试用例001 失败')
time.sleep(5)#暂停5s
driver.quit()#浏览器退出
str1='小明今天很开心'
print(str1.startswith('心'))
#xpath定位方式 #一绝对路径 /html/body开始寻找元素 注意是一层一层的找 不能越级 #查找元素 按ctrl+f 出来搜索框 里面可以填写xpath或者css表达式去验证是否找到元素 #选中的元素有黄色高亮显示
from selenium import webdriver
import time
driver=webdriver.Chrome()
driver.get('https://www.baidu.com')
#/html/body一层一层去写标签
driver.find_element_by_xpath('/html/body/div/div/div/div/div/form/span/input').send_keys('松勤')
#通过属性去定位 标签[@属性='属性值']
#driver.find_element_by_xpath('/html/body/div/div/div/div/div/form/span/input[@value="百度一下"]').click()
#通过下标去定位 绝对路径+索引 索引是从1
driver.find_element_by_xpath('/html/body/div/div/div/div/div/form/span[2]/input').click()
#copy fullxpath 不推荐使用
time.sleep(5)
driver.quit()
#二。相对路径定位
from selenium import webdriver import time driver=webdriver.Chrome() driver.get('https://www.baidu.com')
#1 以//开头 任意标签 找到下面所有符合表达式标签的都会匹配 可以越级
driver.find_element_by_xpath('//span/input').send_keys('松勤') #2通过索引的方式去使用 //标签[索引] 任意位置的第二个span标签下的input标签
driver.find_element_by_xpath('//span[2]/input').click()
#3可以使用//标签[@属性='属性值']
driver.find_element_by_xpath('//input[@type="submit"]').click()
#4 通配符 * 代表任意 //*[@属性='属性值']
driver.find_element_by_xpath('//*[@type="submit"]')#任意标签type属性等于submit属性值
#copy xpath 不建议使用 time.sleep(5) driver.quit()
#css定位方式 #1通过id去选择定位 #代表了id #id的属性值 相当于 xpath @id
from selenium import webdriver
import time
driver=webdriver.Chrome()
driver.get('https://www.baidu.com')
#1通过id去选择定位 #代表了id #id的属性值 相当于 xpath @id
driver.find_element_by_css_selector('#kw').send_keys('松勤')
#2通过class定位 .代表class .class属性值 如果class属性中间有空格①把空格前的删掉 ②把空格替换成.
driver.find_element_by_css_selector('.bg.s_btn').click()
#3通过标签+属性=属性值 标签[属性='属性值'] 跟xpath区别 没有// 也没@ 有class或者id的话可以简写:标签#id属性值
driver.find_element_by_css_selector('input[class="s_ipt"]').send_keys('松勤')
driver.find_element_by_css_selector("input[value='百度一下']").click()
#4模糊查询 #①以……开头 ^ shift+6键 标签[属性^=属性值的开头]
driver.find_element_by_css_selector("input[name^='w']").send_keys('松勤')
driver.find_element_by_css_selector("input[type^='sub']").click()
#②以……结尾 $ 英文状态下shift+4键 标签[属性$=属性值的结尾]
tmplist=driver.find_elements_by_css_selector("input[name$='d']")
tmplist[0].send_keys('松勤')
driver.find_element_by_css_selector("input[type$='t']").click()
#③ 以……中间 * 标签[属性*=属性值的中间]
driver.find_element_by_css_selector("input[class*='_i']").send_keys('松勤')
driver.find_element_by_css_selector("input[class*='_bt']").click()
#5子元素查询 A>B>C>D 可以不从头开始 , 但是不能越级 多层也可以 也可以A>B[属性=属性值] 注意没有下标 像xpath里//A/B/C/D
driver.find_element_by_css_selector('span>input').send_keys('松勤')
#6后代元素 A B没有层级 表示A标签下所有后代标签B 多层 也可以A[属性=属性值] B[属性=属性值] #7子元素查找 标签:nth-child(num) 找第几个孩子 num的值是1开始 num几个孩子是同级 相当于xpath里的标签[索引] #如定位12306 的发车时间6:00-12:00 select option:nth-child(3) #如果只想匹配第一个孩子 标签:first-child 如果匹配最后一个孩子 标签:last-child #copy selector
time.sleep(5)
driver.quit()
#智能等待 #1强制等待 一直等待 啥也干不了 (必须掌握) 有些时候 你页面没加载完成 去定位了会报找不到元素
import time
from datetime import datetime
print('开始时间',datetime.now())
time.sleep(5) #一般3-5秒
print('结束时间',datetime.now())
#2隐式等待 针对的是整个浏览器 页面加载最长的时间 所有元素(不做要求)
from selenium import webdriver
driver=webdriver.Chrome()
driver.implicitly_wait(10) #超过最大等待时间没定位到就会报错 相当于一场考试2小时 有人提前交卷 最长二个小时
#3显示等待 针对具体某个元素 设置等待时间(不做要求) 针对具体的元素和超时时间的限制
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium import webdriver
#until 知道某个元素出现 not until 直到某个元素小时
#presence_of_element_located 确认元素存在
driver=webdriver.Chrome()
element=WebDriverWait(driver,10,0.5).until(EC.presence_of_element_located((By.ID,'kw')))#element是元素对象,针对具体某个元素
#excel表格操作 #安装三个库 读 pip install xlrd 写 pip install xlwt 更改 pip install xlutils import xlrd import xlwt from xlutils.copy import copy
#写操作
peoplelist=[['姓名','年龄','性别'],['小明',18,'男'],['小红',25,'女']]
book=xlwt.Workbook()#新建工作表
sheet=book.add_sheet('人员列表')#新建sheet页
#行 列写入
row=0#控制行
for people in peoplelist:
col=0#控制列
for one in people:#循环列表中的列表
print(one)
sheet.write(row,col,one)#写入数据 (0,0,姓名) (0,1,年龄) (0,2,性别)
col+=1#列+1
row+=1#行+1
book.save('E:/people.xls')#保存excel表格 写路径
print('数据写入完成')
#读操作
book=xlrd.open_workbook('people.xls')#打开excel表格
sheet=book.sheet_by_name('人员列表')#读取sheet页
#读取姓名
print(sheet.cell(0,0).value)#读取单个
print(sheet.cell(2,1).value)
#读取一行
print(sheet.row_values(0))#读取第一行
#读取一列
print(sheet.col_values(0))#读取第一列
#读取所有行
print(sheet.nrows)总共的行数
for one in range(sheet.nrows):
print(sheet.row_values(one))
#读取所有列
print(sheet.ncols)#总共的列数
for one in range(sheet.ncols):
print(sheet.col_values(one))
#更改:
book1=xlrd.open_workbook('people.xls')#打开excel表格
book2=copy(book1)#复制excel表格
sheet=book2.get_sheet(0)#通过索引获取sheet页 第一个sheet页 从0
sheet.write(2,1,25)#更新第三行第二列单元格里的数据
# book2.save('people.xls')#保存 更新原excel
book2.save('person.xls')# 换个名字另存为为一个修改过后的 原数据保持不变
from selenium import webdriver import time #初始化,运行chrome driver driver = webdriver.Chrome()
driver.find_element_by_id('userName').send_keys('testxt') driver.find_element_by_id('password').send_keys('songqintest') driver.find_element_by_id('but_login').click() ele = driver.find_element_by_class_name('form-control') print(ele.text) if ele.text == '欢迎登录松勤VIP管理系统': print('pass') else:
浙公网安备 33010602011771号