Python&Selenium
2020-06-07 16:05:18 0 举报
AI智能生成
后续持续更新
作者其他创作
大纲/内容
定位方式
by_id( )
by_name( )
by_tag_name( )
by_class_name( )
by_link_Text( )
by_partial_link_Text( )
by_xpath( )
by.css_selector( )
根据已有属性定位
driver.find_element_by_id( )
根据id定位
driver.find_element_by_name( )
根据name定位
driver.find_element_by_tag_name( )
driver.find_element_by_class_name( )
driver.find_element_by_link_text( )
driver.find_element_by_partial_link_text( )
定位链接的部分文字
driver.find_elements_by_tag_name( )
用复数的方式搜索出标签列表;然后遍历列表定位
路径定位
格式:driver.find_element_by_xpath( )
绝对路径:一层层写,结合ctrl+f使用
以/为标记,从html/body开始
劣势:一旦界面元素发生变化句得修改脚本
相对路径:选择属性--右键--copy--xpath
以//为标记
以*作为节点通配符
以@属性名和[属性名=‘属性值’]
以[ ]获取子元素位置;元素定位时以1开始
以 | 表示选择多个并列的路径://food/name | //food/price
同一层的两个属性,中间以(空格)隔开:("input[@type='submit'] [@name='su']")
or的选择:find_element_by_xpath("//input[@type='submit' or @name='su']")
CSS选择器
格式:driver.find_element_by_css_selector( )
根据ID定位:
用#表示id:id=test-->#test
根据class定位:
用.(点)表示class:class=test-->.test
根据标签+ID:
用#表示id:<input id="test">-->input#test
根据标签+class:
用.(点)表示class:<input class="test">-->input.test
根据元素属性匹配
精准匹配
<input id=""test> -->input[id='test']
<input id=""test name=test11> -->input[id='test'] [name='test11']
模糊匹配
用 ^符号表示xx开头的元素匹配<input id='szy'>-->input[id ^='s']
用$符号表示以xx结尾的元素匹配 <input id='szy'>-->input[id $='y']
用*符号表示包含xx(中间位置)内容的元素匹配 <input id='szy'>-->input[id *='z']
^ $ *可以代表单个字符和字符串
子元素:>
A>B:根据标签定位B是A的所有儿子辈
A(空格)C:根据标签定位,C是A的所有子孙辈
子元素:nth-child( )
第一个后代元素:firdt-child
最后一个后代元素:last-child
其他标签定位:nth-child(n)来定位-->如option:nth-child(3):定位标签option中的第三个后代元素
iframe框架
driver.switch_to.frame( );进入iframe框架;( )括号中为iframe中的name值进行定位;也可以用定位方法进行定位
退出框架:driver._switch_to.default_content( )
页面查找iframe:元素中ctrl+f 查找iframe
智能等待
强制等待
需要导入的包:import time
格式:time.sleep( )
隐式等待
driver.implicitly_wait( );针对driver
显示等待:针对于某个元素
需要导入的包
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
和until连用;代表一直等待,直到某个元素可见
和not nutil连用;判断某个元素直到不存在
presence_of_element_located( )判断页面某个元素在页面中存在
认识Python
是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言
语言优势
简单、易学
具有丰富和强大的库
主要特点
面向对象
动态类型
跨平台
开发工具
PyCharm
数据类型
数值型
int整型
float浮点型
str
字符串,用''(单引号)、""(双引号)或''''''(三引号)表示
str = ‘name';索引[ ];print(str[1]);切片[start:end]左含右不含
常用函数
split():切割
replace():替换
strip():去掉前后空格
lstrip()--去掉左边空格
rstrip()--去掉右边空格
bool
布尔类型,取值True或False
list
列表[1,2,'su'];可以为各种数据类型,可以索引,切片可以增删改操作
常用函数
list.append(值);增加元素;在列表中直接追加
list.insert(位置,值);在指定位置插入
list.pop(下标);通过下标删除元素值
del alist[下标];通过下标删除元素
list.remove(值);直接删除某个值;不会重复删除
tuple
元祖( );数据类型可以任意,一个元素的元组需要有,逗号隔开,元组不能增,删,改;相当于不可变的list
tuple=(2,3,"susu",[5,'feng'])
dict
字典{ };key-value形式;没有索引,切片的操作,但是可以增删改操作
dict1={"name":"小刘","age":18}
类型转换
通过函数方式,各个数据类型间可灵活转换
转换函数:int( );str( );list( );tuple( );
运算符
比较运算符
算术运算符:+、-、*、/(除)、%(取模)、**(幂运算)、//(整除)
==、!=(不等于)、>、<、>=、<=
赋值运算符
=、+=、-=、/=、%=、**=
位运算符
&(与)、|(或)
逻辑运算符
and、or、not
成员运算符
如果在指定的序列中找到值返回True;否则返回False
in、not in
条件语句
if....else 满足条件就执行if下面语句,不满足就执行else下面的语句
if....elif...else 多分支结构的条件判断
if条件判断中可以进行嵌套
当条件为:非0,非空值,非空列表,非空元组,,该if结果均为真True
循环语句
while循环
while 条件表达式:
循环体
循环体
斐波那列数列:
for循环;遍历手法
for..in...
range(1,101):左含右不含
break:跳出本层循环
continue:结束本次循环
面向对象
封装
类
使用class关键字声明
举例:
方法
实例方法
与类的某个实例变量相关
第一个参数必须是当前对象,通常写作self
静态方法
与类相关,但不需要任何类或实例变量
使用@staticmethod装饰器声明
属性
实例属性
在实例方法中定义的属性,通过实例访问
类属性
直接在类中定义(不在方法内)的属性,可通过类名直接访问
私有属性
变量名前加“__”两个下划线
公有属性
默认定义的就是公有属性
模块、包导入
安装第三方python库
pip install 库名
pip install –i https://pypi.tuna.tsinghua.edu.cn/simple 库名
导入模块:import 模块名
不同的包里调用不同的模块: from 包名 import 模块名
不同的包里调用相同的模块,就近原则,如果需要调用就用别名as
如果导入同级目录的多个模块import多个模块用 逗号, 隔开
只导入不同包里的模块函数 from 包名.模块名 import 函数名
0 条评论
下一页