python: 1.win7系统 service pack 1 才能安装python解释器 2.选择customize installation 自定义安装 勾选 add python 3.7 to path 添加到环境变量 3选择install for all users 防止电脑有多个用户 4.可以安装多个python版本,他会默认环境变量中的第一个 验证安装成功: 进入cmd 输入python 如果不是内部或外部指令,没有配置环境变量 进入python解释器 1cmd里输入python回车 2开始菜单-idle 3开始菜单 python3.7 退出的三种方法 exit() quit() ctrl+z回车 三种退出方法 安装pycharm前提条件: 1.必须安装jdk 配置环境变量 依赖java环境 2。选择社区版 功能够用 3.看系统勾选32或者64位 新建工程 1点击小三角 一定选择第二个 选择本地的python解释器 2location放项目目录,选择熟悉的 3 python interpreter 选择system interpreter 选择本地解释器python.exe 选择create 4.创建python文件 print的时候不要空格 print('hello world') ^ IndentationError: unexpected indent

pip install selenium

python pip升级

第一种

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(alist3)#取2

#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])#索引+拼接

#切片+步长(偶数)

print(str1[::2])

#回顾 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')

driver.quit()

 

搭建 1python 2 pycharm 3 selenium库 4chrome浏览器 5浏览器驱动 #html 超文本标记语言 前端三剑客 html css js html 元素 css 渲染元素 js 交互 动态的部分 #打开浏览器 按f12 选择elements就看到html页面 html页面一般都是成对组成的 #选择元素 点击鼠标小箭头 选择页面元素 跳到元素的位置 背景蓝色 #紫色是标签 橘色是属性=蓝色是属性值

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() #一般都用相对路径 比绝对路径查找快

 

7大定位 定位方式 id name class tag link_text partial_link_text xpath #xpath :1绝对路径定位 /html/body/一层层去写 不能越级 2相对路径 // 通配符 *任意 #标签[@属性=属性值] 通过下标 标签[索引] 索引从1开始

#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.implicitly_wait(10) driver.maximize_window() driver.get('http://120.55.190.222:9090/loginController.do?login2')

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: print('fail')

posted on 2021-03-04 12:12  阿巳  阅读(196)  评论(0)    收藏  举报