selenium库的使用(四):获取定位元素的信息

使用selenium成功定位元素后,会返回 WebElement 类对象的一串描述;实际上, WebElement 提供了属性和方法来获取元素的文本值和属性值(比如文本、图片链接),这样就不必再解析(比如使用BeautifulSoup库解析)源代码来获取信息了,节省很多步骤

部分系列

selenium库的使用(三):定位元素
selenium库的使用(七):隐性等待和显性等待
selenium库的使用(十七):元素状态判断

WebElement属性

获取文本值

1
WebElement.text

获取元素的id

1
WebElement.id

selenium使用的内部ID
这主要用于内部使用,比如检查2个webelements是否指向同一个元素

获取元素的名称

1
WebElement.tag_name

获取元素的宽高

1
WebElement.size

获取可见元素在屏幕左上角的x、y坐标

1
WebElement.location_once_scrolled_into_view

这个属性可能会在没有警告的情况下发生变化
使用这个方法来发现一个元素在屏幕上的位置,以便我们可以点击它
这个方法应该导致元素被滚动到视图中
如果元素不可见,则返回 None

获取元素在可渲染画布中的左上角x、y坐标

1
WebElement.location

获取元素的宽高及x、y坐标

1
WebElement.rect

获取元素的父级元素对象

1
webelement.parent

该元素从WebDriver实例的内部引用

实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import time
from selenium import webdriver

driver = webdriver.Chrome()
driver.get('https://www.gaoyuanqi.cn/python-html-1/#more')

# 等待2s
time.sleep(2)

# 通过元素的class属性定位
webelement = driver.find_element_by_class_name('gu_shi')

print(webelement.text)
print(webelement.id)
print(webelement.tag_name)
print(webelement.size)
print(webelement.location_once_scrolled_into_view)
print(webelement.location)
print(webelement.rect)
print(webelement.parent)

# 退出驱动并关闭浏览器
driver.quit()

输出

1
2
3
4
5
6
7
8
君问归期未有期
34276191-f028-44ff-86ae-58889dc4d4bf
p
{'height': 32, 'width': 547}
{'x': 362, 'y': 0}
{'x': 362, 'y': 304}
{'height': 32, 'width': 547, 'x': 362, 'y': 304.40000000596046}
<selenium.webdriver.chrome.webdriver.WebDriver (session="af1f325c2a6a33a51aecbc507c8d8596")>

WebElement方法

获取元素的属性值

1
2
WebElement.get_property(name)
WebElement.get_attribute(name)

如果不存在该名称的属性,则返回同名属性的值;如果没有该名称的属性,则返回 None
name :属性名称,比如 hrefsrc

实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import time
from selenium import webdriver

driver = webdriver.Chrome()
driver.get('https://www.gaoyuanqi.cn/python-html-1/#more')

# 等待2s
time.sleep(2)

# 通过元素的class属性定位图片
webelement_image = driver.find_element_by_class_name('tu_pian')
# 打印获取图片链接
print(webelement_image.get_property('src'))

# 通过元素的class属性定位文本链接
webelement_text = driver.find_element_by_class_name('text_url')
# 打印文字链接
print(webelement_text.get_attribute('href'))

# 退出驱动并关闭浏览器
driver.quit()

输出

1
2
https://www.gaoyuanqi.cn/images/avatar.png
https://www.gaoyuanqi.cn/python-html-1/#more