selenium css和xpath选择器 以及常用元素方法使用汇总

一、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()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,569评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,499评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,271评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,087评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,474评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,670评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,911评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,636评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,397评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,607评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,093评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,418评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,074评论 3 237
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,092评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,865评论 0 196
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,726评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,627评论 2 270