此处以“菜鸟教程”网页举例,先打开菜鸟教程首页http://www.51sjk.com/Upload/Articles/1/0/283/283834_20210710002642202.jpg,再打开“菜鸟笔记”tab
>>> from selenium import webdriver
>>> b = webdriver.Chrome()
>>> b.get('http://www.51sjk.com/Upload/Articles/1/0/283/283834_20210710002642202.jpg')
>>> b.maximize_window() #最大化窗口
<a target="_blank" data-id="note" title="菜鸟笔记">菜鸟笔记</a>
⑤find_element_by_link_text()
有时候不是一个输入框也不是一个按钮,而是一个文字链接,我们可以通过link_text定位。
ele = b.find_element_by_link_text('菜鸟笔记')
ele.click()
⑥find_element_by_partial_link_text()
通过部分链接定位
ele = b.find_element_by_partial_link_text('笔记')
ele.click()
⑦find_element_by_xpath()参考链接
XPath是一种在XML文档中定位元素的语言。因为HTML可以看做XML的一种实现,所以selenium用户可以使用这种强大语言在web应用中定位元素。XPath扩展了上面id和name定位方式,提供了很多种可能性,比如定位页面上的第三个多选框。
XPath语法 ? ? ? ? ?
表达式 | 结果 |
/xxx | 选取根节点xxx |
/xxx/yyy | 根据绝对路径选择元素 |
//xxx | 整个文档扫描,找到所有xxx元素 |
//xxx/yyy | 所有父元素为xxx的yyy元素 |
. | 选取当前节点的父元素节点 |
.. | 选取父元素地址 |
//xxx[@id] | 选取所有xxx元素中有id属性的元素 |
//xxx[@id=yyy] | 选取所有xxx元素id属性为yyy的元素? |
⑧find_element_by_css_selector()
CSS(Cascading?Style?Sheets)是一种语言,它被用来描述HTML和XML文档的表现。CSS使用选择器来为页面元素绑定属性。这些选择器可以被selenium用作另外的定位策略。CSS的比较灵活可以选择控件的任意属性。
CSS选择器参考手册
- 复制相关控件的css路径:右键控件——检查,自动定位——右键该行,Copy,Copy selector
ele = b.find_element_by_css_selector('#index-nav > li:nth-child(2) > a')
ele.click()
- 后代或平级关系来选择元素 详见链接
父元素:
? ? (#)表示通过 ?id ? ? 属性来定位元素
?? ?(.)表示通过 class ?属性来定位元素
子元素(后代关系)
? ?#choose_car option ? ?含空格的,后面的元素不必是前面元素的直接子元素,只要在父元素的里面
? ?.s_ipt_wr span?
? ?#choose_car > option ?含>键的, ? ?后面的元素必须是前面元素的直接子元素
? ?.s_ipt_wr > span
? ?ul > ol > li > em ? ? ? ? ? ? ? ?可以是很多级的父子关系
组合型
#food ?> span , p ? ? ? ? ? ? ? ? ? ? 选择id 为food的所有span子元素和所有的p(包括非food的子元素)
#food > span , #food > p ? ? ? ? 选择id为food的所有span子元素和所有p子元素
#food ?> * ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 选择id为food的所有子元素
兄弟节点的选择 (平级关系)
#food + div ? ? ?只选择id为food紧跟后面的div
#food ~div ? ? ? 选择id为food后面的div或div们,只需要在id的后面,不需要紧跟
- 根据元素的属性及属性值来选择元素详见链接
*[style] ?选择所有有stype属性的元素
p[spec=len2] ? 选择spec属性值只等于len2的p元素
yp[spec='len2 len3' ] ? ?选择spec属性值只等于len2 len3的p元素 ? 有空的值一定要加引号
p[spec*='len2'] ? ? ? ? ? ? 选择spec属性值包含len2的p元素
p[spec^='len2'] ? ? ? ? ? ?选择spec属性值以len2开头的p元素
p[spec&='len2'] ? ? ? ? ? 选择spec属性值以len2结尾的p元素
p[class=special][name=p1] ? ?选择class值等于special,并且name值等于p1的p元素
p:nth-child(1) ? ? ? ? ? ? ?选择第一个p元素
p:nth-last-child(1) ? ? ? ? ? ? ?选择倒数第一个p元素(要保证最后一个元素是p)
举例:ele =?b.find_element_by_css_selector('input[type="text"]')
? ? ? ? ??ele =?b.find_element_by_css_selector('img[alt="麦子学院三周年"]')
? ? ?
?
?