selenium元素定位的方法
# 元素定位的方法
# 学习目标
- 掌握 selenium定位元素的方法
- 掌握 selenium从元素中获取文本和属性的方法
通过selenium的基本使用可以简单定位元素和获取对应的数据,接下来我们再来学习下 定位元素的其他方法
# 1 selenium的定位操作
定位元素语法:
find_element_by_id (返回一个元素)
find_elements_by_xpath (返回一个包含元素的列表)
find_elements_by_link_text (根据连接文本获取元素列表)
find_elements_by_partial_link_text (根据链接包含的文本获取元素列表)
find_elements_by_tag_name (根据标签名获取元素列表)
find_elements_by_class_name (根据类名获取元素列表)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
注意:
find_element和find_elements的区别:多了个s就返回列表,没有s就返回匹配到的第一个 by_link_text和by_partial_link_tex的区别:全部文本和包含某个文本
- 使用: 以豆瓣首页为例:https://www.douban.com/ (opens new window)
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.douban.com/")
ret1 = driver.find_element_by_id("anony-nav")
print(ret1)
# 输出为:
ret2 = driver.find_elements_by_id("anony-nav")
print(ret2)
#输出为:[]
ret3 = driver.find_elements_by_xpath("//*[@id='anony-nav']/h1/a")
print(len(ret3))
#输出为:1
ret4 = driver.find_elements_by_tag_name("h1")
print(len(ret4))
#输出为:1
ret5 = driver.find_elements_by_link_text("下载豆瓣 App")
print(len(ret5))
#输出为:1
ret6 = driver.find_elements_by_partial_link_text("豆瓣")
print(len(ret6))
#输出为:24
driver.close()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
获取数据语法
- find_element仅仅能够获取元素,不能够直接获取其中的数据,如果需要获取数据需要使用以下方法:
- 获取文本:
element.text
- 获取属性值:
element.get_attribute("href")
- 获取文本:
- find_element仅仅能够获取元素,不能够直接获取其中的数据,如果需要获取数据需要使用以下方法:
- 使用示例:
from selenium import webdriver
driver =webdriver.Chrome()
driver.get("https://www.douban.com/")
ret7 = driver.find_elements_by_tag_name("h1")
print(ret7[0].text)
#输出:豆瓣
ret8 = driver.find_elements_by_link_text("下载豆瓣 App")
print(ret8[0].get_attribute("href"))
#输出:https://www.douban.com/doubanapp/app?channel=nimingye
driver.close()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 小结
- 根据xpath定位元素:
driver.find_elements_by_xpath("//*[@id='s']/h1/a")
- 根据class定位元素:
driver.find_elements_by_class_name("box")
- 根据link_text定位元素:
driver.find_elements_by_link_text("下载豆瓣 App")
- 根据tag_name定位元素:
driver.find_elements_by_tag_name("h1")
- 获取文本内容:
element.text
- 获取标签属性:
element.get_attribute("href")
编辑 (opens new window)