一、selenium css 选择器 用法
选择器 | 示例 | 描述 |
---|---|---|
* | * | 匹配任何元素 |
element | DIV | 标签选择器,匹配所有使用DIV标签的元素 |
.class | .tips | class选择器,匹配所有class属性中包含info的元素 .a.b则匹配同时包含a和b的元素 |
#id | #username | id选择器,匹配id属性为username的元素 |
element,element | DIV,SPAN | 多元素选择器,选择所有DIV和SPAN全集,使用,分隔 |
element element | DIV SPAN | 后代元选择器,匹配所有的DIV的SPAN后代元素,中间使用空格分隔 |
elemen> telement | DIV>SPAN | 子元素选择器,匹配所有的DIV的SPAN子元素,中间使用> 分隔 |
elemen+ telement | DIV+SPAN | 毗邻元素选择器,匹配紧随DIV后面的同级SPAN元素(only one),不一定就是一个同一个div后面的一个 |
elemen~ telement | DIV~SPAN | 同级元素选择器,匹配所有DIV后面的同级SPAN元素,可以隔着其他元素 |
[attribute] | [att] | 所有包含att属性的元素 |
[attribute=vlaue] | DIV [att='val'] | 匹配所有att属性为val的DIV元素 |
[attribute^=vlaue] [attribute|=vlaue] | DIV[att^='val'] | 匹配所有att属性以val开头的DIV元素 w3s使用的是 | |
[attribute$=vlaue] | DIV[att$='val'] | 匹配所有att属性以val结尾的DIV元素 |
[attribute*=vlaue] [attribute~=vlaue] | DIV[att*='val'] | 匹配所有att属性包含val的DIV元素 |
[attr1=vla1][attr2*=vla2] | DIV[att1='v1'][att2*='v2'] | 匹配所有att属性为v1,att2属性包含v2的DIV元素 |
[attr1=vla1],[attr2*=vla2] | DIV[att1='v1'],[att2*='v2'] | 同上 或关系 |
:link | a:link | 选择所有未被访问的链接 |
:visited | a:visited | 选择所有已被访问的链接 |
:active | a:active | 选择所有活动链接 |
:hover | a:hover | 选择鼠标指针所在的链接 |
:focus | input:focus | 选择获取焦点的input元素 |
:first-child | p:first-child | 选择所有符合如下规则的p元素,p必须是其父元素的第一个子元素 |
:last-child | p:last-child | 选择所有符合如下规则的p元素,p必须是其父元素的最后一个子元素 |
:first-of-type | p:first-of-type | 选择父元素的首个p子元素的集合,和first-child区别是前面可以有非p元素,不一定是父元素的第一个子元素 |
:last-of-type | p:last-of-type | 选择父元素的首最后一个p子元素的集合,和last-child区别是后面可以有非p元素,不一定是父元素的最后一个子元素 |
:only-of-type | p:only-of-type | 选择父元素的只有唯一个p子元素的集合 |
:nth-child(n) | p:nth-child(2) | 选择属于其父元素的第二个子元素的每个 <p> 元素 |
:nth-last-child(n) | p:nth-last-child(2) | 同上,从最后一个元素来计数 |
:nth-of-type(n) | p:nth-of-type(2) | 选择父元素的第二个p子元素的集合,和:nth-child(n) 区别是前后可以有非p元素,不一定是父元素的第二个子元素 |
:nth-last-of-type(n) | p:nth-last-of-type(2) | 同上,从最后一个元素来计数 |
:root | :root | 选择文档的根元素 |
:empty | p:empty | 选择没有子节点的p元素包含文本节点 |
:enabled | input:enabled | 选择每个启用的input元素 |
:disabled | input:disabled | 选择每个禁用的input元素 |
:checked | input:checked | 选择每个被选中的input元素 |
:not(selector) | :not(p) | 选择所有非p元素 |
Selenium 中则是采用 | 了来自Sizzle 的css3 | 定位扩展,它的语法更加灵活易懂。 |
:nth(n):eq(n) | li:nth(2)li:eq(2) | 同:nth-child(n),但是从0开始 |
:first | li:first | 同:first-child |
:last | li:last | 同:last-child |
:even | li:even | 在其父元素中的li 子元素集合中排在偶数位的集合 |
:odd | li:odd | 在其父元素中的li 子元素集合中排在奇数位的集合 |
:lt(n) | li:lt(2) | 在其父元素中的li 子元素集合中排在第n位之前的所有元素集合(不包含n),n从0开始 |
:gt(n) | lg:lt(2) | 在其父元素中的li 子元素集合中排在第n位之后的所有元素集合(不包含n),n从0开始 |
:only-child | div:only-child | 同:only-of-type |
:empty | p:empty | 同CSS原生选择器:empty |
:input | :input | 获取所有input类型的元素(包含input、select、textarea) |
:text, :checkbox, :file, :password, :submit, :image, :reset, :button | ... | 获取指定类型的元素 |
二、selenium xpath 选择器 用法
表达式 | 示 例 | 说 明 |
---|---|---|
article | 选取所有article元素的所有子节点 | |
/article | 选取根元素article | |
article/a | 选取所有属于article的子元素的a元素 | |
//div | 选取所有div子元素(不论出现在文档任何地方) | |
article//div | 选取所有属于article元素的后代的div元素,不管它出现在article之下的任何位置 | |
//@class | 选取所有名为class的属性 | |
/article/div[1] | 选取属于article子元素的第一个div元素 | |
/article/div[last()] | 选取属于article子元素的最后一个div元素 | |
/article/div[last()-1] | 选取属于article子元素的倒数第二个div元素 | |
//div[@lang] | 选取所有拥有lang属性的div元素 | |
//div[@lang='eng'] | 选取所有lang属性为eng的div元素 | |
/div/* | 选取属于div元素的所有子节点 | |
//* | 选取所有元素 | |
//div[@*] | 选取所有带(任意)属性的div元素 | |
/div/a | //div/p | 选取所有div元素的a和p元素 | |
//span | //ul | 选取文档中的span和ul元素 | |
article/div/p | //span | 选取所有属于article元素的div元素的p元素以及文档中的所有span元素 | |
//div[@id='1']/h1/text() | 获取id为1的div标签下的h1标签里的内容 | |
//span[not(@class)] | 选择不包含class属性的span节点 | |
//span[not(@class) and not(@id)] | 选择不包含class和id属性的span节点 | |
//span[not(contains(@class,'expire'))] | 选择不包含class="expire"的span | |
//span[contains(@class,'expire')] | 选择包含class="expire"的span | |
//h2[contains(text(),'Activated')] | 选择标签内容里包含Activated的h2标签 | |
//div[not(contains(text(),'activated'))] | 选择标签内容中不包含activated的div标签 |
说明:XPATH如何选择不包含某一个属性的节点
我们知道选择包含某一特定属性的节点,可以使用例如//tbody/tr[@class]来选择。那么不含某属性的节点如何用xpath取得呢?
这里可以用到not,例如排除一个属性的节点可以使用//tbody/tr[not(@class)]来写,排除一个或者两个属性可以使用//tbody/tr[not(@class or @id)]来选择。
三、常用元素方法
新建实例driver = webdriver.Firefox()
此处定位均使用的百度首页输入框
功 能 说 明 | 方 法 | 实 例 |
---|---|---|
1.通过标签属性Id查找元素 | find_element_by_id(element_id) | driver.find_element_by_id("kw") |
2.通过标签属性name查找元素 | find_element_by_name(element_name) | driver.find_element_by_name("wd") |
3.通过标签Xpath路径查找元素 | find_element_by_xpath(xpath) | driver.find_element_by_xpath("//[[@*id](https://testerhome.com/id "@id")="kw"]") |
4.通过标签名tagname查找元素 | find_element_by_tag_name(tag_name) | driver.find_element_by_tag_name("input") |
5.通过标签中的元素文本链接查找元素 | find_element_by_link_text(link_text) | driver.find_element_by_link_text('百度一下') |
6.通过标签的class属性查找元素 | find_elements_by_class_name(class_name) | driver.find_elements_by_class_name("s_ipt") |
7.通过css样式查找元素 | find_element_by_css_selector() | driver.find_element_by_css_selector("#kw") |
8.浏览器中加载url | get(url) | driver.get("http://www.baidu.com") |
9.向前 | forward() | driver.forward() |
10.返回当前会话中的cookies | get_cookies() | driver.get_cookies() |
11.根据cookie name 查找 | driver.get_cookie(cookie_name) | driver.get_cookie("NET_SessionId") |
12.截取当前页面 | get_screenshot_as_file(filename) | driver.get_screenshot_as_file(r"C:\Users\Eric\Desktop\test.png") |
13.获取当前窗口的坐标 | get_window_position() | driver.get_window_position() |
14.获取当前窗口的长和宽 | get_window_size() | driver.get_window_size() |
15.获取当前页面的Url函数 | current_url | driver.current_url |
16.获取元素坐标(首先查找到你要获取元素的,然后调用location方法) | location | driver.find_element_by_id("kw").location |
17.表单的提交(查找到表单(from)直接调用submit即可) | submit | driver.find_element_by_id("su").submit() |
18.获取CSS的属性值 | value_of_css_property(css_name) | driver.find_element_by_id("su").value_of_css_property("color") |
19.获取元素的属性值 | get_attribute(element_name) | driver.find_element_by_id("kw").get_attribute("type") |
20.判断元素是否被选中 | is_selected() | driver.find_element_by_id("form1").is_selected() |
21.返回元素的大小(返回值:{'width': 102, 'height': 38}) | size | driver.find_element_by_id("kw").size |
22.判断元素是否显示 | is_displayed() | driver.find_element_by_id("kw").is_displayed() |
23.判断元素是否被使用 | is_enabled() | driver.find_element_by_id("kw").is_enabled() |
24.获取元素的文本值 | text | driver.find_element_by_class_name("mnav").text |
25.输入值 | send_keys(*values) | driver.find_element_by_id("kw").send_keys('admin') |
26.返回元素的tagName | tag_name | driver.find_element_by_id("kw").tag_name |
27.删除浏览器所以的cookies | delete_all_cookies() | driver.delete_all_cookies() |
28.删除指定的cookie | delete_cookie(name) | deriver.delete_cookie("my_cookie_name") |
29.关闭浏览器 | close() | driver.close() |
30.关闭浏览器并且推出驱动程序 | quit() | driver.quit() |
31.返回上一页 | back() | driver.back() |
32.设置等待超时 | implicitly_wait(wait_time) | driver.implicitly_wait(30) |
33.浏览器窗口最大化 | maximize_window() | driver.maximize_window() |
34.查看浏览器的名字 | name | drvier.name |
35.刷新当前浏览器 | refresh | drvier.refresh() |