一、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() |