****重点1:脚本编写流程:4大步
步骤1:创建浏览器对象
步骤2:获取页面
步骤3:操作页面
步骤4:关闭页面
步骤1:1) 导入模块
2)driver = webdriver.Firefox()---类似的操作情况
步骤2:1)构建url:必须包含完整的协议名:http
例如:url = "http://www.baidu.com"
2)通过浏览器对象打开页面:driver.get(url)
步骤3:根据操作的内容可分为两类:
第一大类:操作页面本身
A操作方法
1)页面大小的操作
a最大化:driver.maximize_window()
b获取大小:driver.get_window_size()
c设置大小:driver.set_window_size(width, height)
2)页面位置的操作
a获取位置:driver.get_window_position()
b设置位置:driver.set_window_position(x, y)
3)页面切换
a后退:driver.back()
b前进:driver.forward()
c刷新:driver.refresh()
注意:需要多次调用get()方法,打开多个页面后,才可使用前进、后退的方法。
B属性(与变量的用法相同)
1)页面的url值:driver.current_url
2)页面标题:driver.title
第二大类:操作页内元素
操作步骤:1)定位元素
2)操作元素
定位元素的方法:
1. driver.find_element_by_xxx(value)
2. from selenium.webdriver.common.by import By
driver.find_element(By.ID, value)
一、元素定位:用于完成元素定位的定位方式:一定要使用变量接收定位到的元素
el = driver.find_element_by_xxx()
1 通过id属性进行定位
2 通过name属性进行定位:driver.find_element_by_name(value)
3 通过class属性进行定位:driver.find_element_by_class_name(value)
4 通过标签名进行定位:driver.find_element_by_tag_name(value)
使用条件:1 要定位的标签是该页面唯一该类标签
2 要定位的标签是该类标签的第一个
5 通过a标签文本信息定位(完整的文本):
driver.find_element_by_link_text()
6 通过a标签文本信息定位(部分文本):
driver.find_element_by_partial_link_text()
7 通过css规则进行定位:driver.find_element_by_css_selector()
8 通过xpath定位:driver.find_element_by_xpath()
二、元素操作:el
操作方向:脚本向页面传输
1 数据输入:el.send_keys(value)
2 清空: el.clear()
3 点击操作:el.click()
4 提交: el.submit()
操作方向:页面回传到脚本
1 获取文本:el.text
2 获取指定属性:el.get_attribute(name)--其中参数name是标签属性的名称
步骤四:关闭页面
1)关闭当前页面: driver.close()
2) 关闭全部页面:driver.quit()
**CSS规则
1 特定属性 标签名称
通过id属性:#id属性值
通过class属性:.class属性值
标签名称
2 嵌套关系
,:div,p 定位到的是div和p标签
空格:div p 属于div标签内部的(不论是子级、后代)p标签
> :div>p 定位到p标签,父级标签是div
+ :div+p 定位到的p标签,其前一个兄弟标签是div
3 属性,关键字符中括号[] ---- 属性的描述形式:name = value
[name]:定位页面中所有含有name属性名的标签
[name = value]:定位页面name属性值为value的标签
[name ~= value]:例如:clas = "box1 content", [class ~= "box1"]
定位到name属性值中包含value内容的标签
注意:value必须一个完整单词
[name^=value]:定位到name属性值以value开头的标签
[name$=value]:定位到name属性值以value结尾的标签
[name*=value]:定位到name属性值包含value内容的标签
4 父子关系
:only-child:例如p:only-child,要定位的标签是其父级标签的唯一子元素,且该元素无子标签
:nth-child(n):例如:p:nth-child(1) 定位属于其父级标签中的第n个子元素
:nth-last-child(n):定位属于其父级标签中倒数第n个子元素
5 元素状态
:empty :定位无子元素、无文本的标签
:not(标签) 反向定位,定位不包含在表达式中的其余标签
------------------------------------------------------------------
xpath定位
***一、DOM:文档对象模型
规定了HTML中内容的组织形式(标签、属性、文本)
1 它会将文件中所有的元素都看待成节点
2 将所有节点组织成一棵树:根、分支、叶子,达到分层的目的
二、通过范例验证html文件确实是按照DOM组织的 ---dom_example.html
三、xpath规则
可用元素:
1 单斜杠'/' : 表示html文档的根位置
2 双斜杠'//' :表示搜索文档任意位置
3 点号'.' :表示当前位置
4 双点'..':表示本位置的上级位置
5 @:描述属性
中括号[]:表示对节点的限定(可用来限定节点位置或描述属性内容或文本值)
1 数字:例如 //p[1] 找到文件各级p标签中的第一个
2 属性:@ 例如 //div[@id='div1'] 找到文件中id属性值为'div1'的div标签
3 函数:
1) last() 范例://p[last()] 查找文档中各组p标签的最后一个
2) position() 范例: //p[position()<3] 查找文档中各组p标签中的前三个
3) text() 范例://a[text()='inner link text'] 查找文本内容为'inner link text'的a标签
4) starts-with() 范例://div[starts-with(@class, 'box1')] 查找文档中class属性值以box1开头的div标签
与CSS中[name^=attribute]作用相同
5) contains() 范例://div[contains(@class, 'content')] 查找文档中class属性值包含content字符串的div标签
与CSS中[name*=attribute]作用相同
多条件连接符号: and
范例://div[contains(@class, 'content') and @id="div1"]
查找文档中class属性值包含content字符串且id属性值为div1的div标签
多元素定位:
1 方法:find_elements_by_xxx(value) 8种定位方式
2 方法的返回结果是列表:
1)对列表采用循环结构,操作各个元素对象
2)操作列表中单个元素的方式和单元素定位后的操作方式一样