selenium提供了多种方法来定位页面中的一个或多个元素,使用哪种方法视情况而定
定位单个元素
方法
以下方法只返回第一个符合的元素
通过元素的id定位
1 2
| driver.find_element_by_id('yu')
|
通过元素的name属性值定位
1 2
| driver.find_element_by_name('yu')
|
通过元素的名称定位
1 2
| driver.find_element_by_tag_name('h1')
|
通过元素的class属性定位
1 2
| driver.find_element_by_class_name('yu')
|
通过元素的链接文本定位超链接
1 2 3 4 5 6
|
driver.find_element_by_link_text('雨园博客')
driver.find_element_by_partial_link_text('雨园')
|
通过Xpath定位
1
| driver.find_element_by_xpath('xpath表达式')
|
通过CSS选择器定位
1
| driver.find_element_by_css_selector('CSS选择器')
|
实例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| import time from selenium import webdriver
driver = webdriver.Chrome() driver.get('https://www.gaoyuanqi.cn/python-html-1/#more')
time.sleep(2)
webelement = driver.find_element_by_class_name('gu_shi')
print(webelement)
driver.quit()
|
输出
1
| <selenium.webdriver.remote.webelement.WebElement (session="803331c45df05cdb589b0373d6b585ca", element="8a927650-a9af-4a34-9e42-d070d737917a")>
|
这是一个 WebElement
类对象,该对象的属性和方法可以提取定位元素的文本值、属性值
定位多个元素
方法
只比 find_element
多了一个 s
,将符合的所有元素以列表返回
1 2 3 4 5 6 7
| find_elements_by_name() find_elements_by_tag_name() find_elements_by_class_name() find_elements_by_link_text() find_elements_by_partial_link_text() find_elements_by_xpath() find_elements_by_css_selector()
|
实例
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')
time.sleep(2)
webelement_list = driver.find_elements_by_class_name('gu_shi')
print(webelement_list)
webelement = driver.find_elements_by_class_name('gu_shi')[2]
print(webelement)
driver.quit()
|
输出
1 2 3
| [<selenium.webdriver.remote.webelement.WebElement (session="bde40b95169dfc20c2f7059ab5776efa", element="d253960a-a760-4f0c-a752-b5f85ca58307")>, <selenium.webdriver.remote.webelement.WebElement (session="bde40b95169dfc20c2f7059ab5776efa", element="ecba2aea-c3ac-4215-88be-9861952506f0")>, <selenium.webdriver.remote.webelement.WebElement (session="bde40b95169dfc20c2f7059ab5776efa", element="9f6ac4a6-3e5d-4e6c-a838-06d2bb4432f8")>, <selenium.webdriver.remote.webelement.WebElement (session="bde40b95169dfc20c2f7059ab5776efa", element="de0d6dc9-188b-443f-828a-ed374a347265")>]
<selenium.webdriver.remote.webelement.WebElement (session="bde40b95169dfc20c2f7059ab5776efa", element="9f6ac4a6-3e5d-4e6c-a838-06d2bb4432f8")>
|
通用方法
定位单个元素
1
| driver.find_element(by, value)
|
by
:查找策略,如 By.ID
定位元素的id
value
:定位元素属性的值,默认为 None
示例:通过 (By.ID, 'yu')
定位 id="yu"
的元素
定位多个元素
1
| driver.find_elements(by, value)
|
By类属性
1 2 3 4 5 6 7 8
| ID = "id" XPATH = "xpath" LINK_TEXT = "link text" PARTIAL_LINK_TEXT = "partial link text" NAME = "name" TAG_NAME = "tag name" CLASS_NAME = "class name" CSS_SELECTOR = "css selector"
|
实例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| import time from selenium import webdriver from selenium.webdriver.common.by import By
driver = webdriver.Chrome() driver.get('https://www.gaoyuanqi.cn/python-html-1/#more')
time.sleep(2)
a = driver.find_element(By.CLASS_NAME, 'gu_shi') b = driver.find_elements(By.CLASS_NAME, 'gu_shi')[2]
print(a) print(b)
driver.quit()
|
输出
1 2 3
| <selenium.webdriver.remote.webelement.WebElement (session="890bb3c0f06118daee625205321b36dd", element="ac1c2ea0-c529-4b81-bb04-37cd7a5f0eac")>
<selenium.webdriver.remote.webelement.WebElement (session="890bb3c0f06118daee625205321b36dd", element="66f381f2-d685-4500-b4c4-de7770cb087a")>
|