要找到目标元素,通过浏览器检查的方式或者按F12键,找到该控件元素,通过其ID、class等属性,能够唯一定位到该元素。
Selenium提供了8种定位方式。
- id
- name
- class name
- tag name
- link text
- partial link text
- xpath
- css selector
这8种定位方式在Python selenium中所对应的方法为:
- find_element_by_id()
- find_element_by_name()
- find_element_by_class_name()
- find_element_by_tag_name()
- find_element_by_link_text()
- find_element_by_partial_link_text()
- find_element_by_xpath()
- find_element_by_css_selector()
---------------------------------------------------------------------------------------
wd = webdriver.Chrome(r'd:\webdrivers\chromedriver.exe')
wd.find_element_by_id('kw') --根据ID属性定位元素
wd.find_elements_by_class_name('animal') --根据class属性定位元素
我们要选择 所有的 动物,注意element后面多了个s
find_elements_by_class_name 方法返回的是找到的符合条件的 所有 元素 (这里有3个元素), 放在一个 列表 中返回。
而如果我们使用 find_element_by_class_name (注意少了一个s) 方法, 就只会返回 第一个 元素。
wd.find_elements_by_tag_name('div') --根据tag定位
element.send_keys('黑羽魔巫宗\n') --发送内容
element.click() --点击方法
# 等待 2 秒,等浏览器加载完成
from time import sleep
sleep(2)
element与elements的区别:
elements = wd.find_elements_by_class_name('animal')
for element in elements: --把所有的元素打印,用循环
print(element.text)
会输出所有的class_name为animal的文本值,即列表: 狮子 老虎 山羊
通过 WebElement 对象的 text属性 可以获取所有元素的文本内容。如无符合条件的,则返回空列表。
若elements = wd.find_element_by_class_name('animal')
print(elements.text) 则只得到第一个值,即狮子。如无符合条件,则抛出异常。
元素也可以有 多个class类型
,多个class类型的值之间用 空格
隔开,比如
<span class="chinese student">张三</span>
注意,这里 span元素 有两个class属性,分别 是 chinese 和 student, 而不是一个 名为 chinese student
的属性。
tag为标签,即<后面的那个,如<div,则div为我们要的tag_name。