文章目录
1. 元素查找基本方法
1.1 ID
driver.find_element_by_id('id')
1.2 CLASS NAME
通过 class 类名查找:
elements = driver.find_elements_by_class_name("animal")
for element in elements:
print(element.text)
注意,如果换做 find_element_by_class_name,则只选择第一个满足条件的元素
一个元素可以有多个 class
,用空格隔开,任何一个 class 都可以作为关键词,但不能一次使用多个 class,如:
driver.find_elements_by_class_name("classA")
driver.find_elements_by_class_name("classB")
driver.find_elements_by_class_name("classA classB") // error
1.3 TAG
可以通过元素的标签名选择元素:
elements = driver.find_elements_by_tag_name('div')
1.4 find_element & find_elements
find_elements 选择所有满足条件的元素,返回一个列表,无满足条件的元素则返回 空列表
find_elemen 选择第一个满足条件的元素,查找失败则 抛出异常
1.5 Element 标签内部查找
查找返回的 WebElement 对象也可以调用 find_element 函数进行内部查找:
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('url')
div = driver.find_element_by_id('id')
spans = div.find_elements_by_tag_name('span')
for span in spans:
print(span.text)
2. 等待时间
由于程序的执行速度可能会比浏览器的响应速度快,有时页面未加载完成程序就已经在查找了,查找失败并抛出异常。
因此需要设置等待时间等待页面的加载,selenium 提供了 implicitly_wait()
,它接受一个参数 —— 最大等待时长,在超时前每隔半秒查询一次,直到查找成功。超时后仍未查找成功则抛出异常!
如百度搜索:我有两颗糖
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://www.baidu.com')
driver.implicitly_wait(8)
imput_button = driver.find_elements_by_id('wd')
imput_button.click()
imput_button.send_keys('我有两颗糖\n')
driver.find_element_by_class_name('c-abstract')
3. 操控元素
操控元素的常用操作包含:点击、输入内容、获取元素的信息(文本、属性等)
3.1 点击
通过 element.click() 实现点击:
element = driver.find_element_by_id('id')
element.click()
3.2 输入框
可以清空输入框、输入内容:
element = driver.find_element_by_id('username')
element.clear()
element.send_keys('xxx\n')
3.3 获取元素信息
获取元素的 text:
element = driver.find_element_by_id('user')
print(element.text)
通过 get_attribute 获取熟悉值:
element = driver.find_element_by_id('user')
print(element.get_attribute('class'))
element = driver.find_element_by_class_name('input')
print(element.get_attribute('value'))
获取 HTML 内容(整个元素 HTML 或 元素内部的 HTML):
element = driver.find_element_by_id('id')
print(element.get_attribute('outerHTML')) // 获取整个元素对应的 HTML
print(element.get_attribute('innerHTML')) // 获取元素内部分HTML
4. CSS selector
4.1 基础使用
语法:
element = driver.find_element_by_css_selector('#id')
elements = driver.find_elements_by_css_selector('.class')
CSS 选择器规则:
id:
#id
class:
class
直接子元素:
tag1 > tag2 > tag3
后代元素:
tag1 tag3
相邻元素:
tag1 + tag2
属性选择:
[attribute_name="attribute_value"]
- div[class = “animal”]
- input[id = “username”] ID 属性值为 username
- a[href*=“hnu”] 属性 href 的值包含 hnu 字符串的 a 标签
- a[href^=“https”] 属性 href 以 https 打头的 a 标签
- a[href^=“https”][href$=".cn"] 组合选择
4.2 联合使用
筛选下面的 Tom:
<div id="animal">
<div class="cat">
<span id="1">Tom</span>
<span id="2">Karl</span>
</div>
<div calss="mouse">
<span id="3">Jerry</span>
</div>
</div>
CSS 选择器表达式为:
div#animal > div.cat > span#1
可以简化为:
#animal #1
4.3 组选择
可以一次选择多个对象(选择所有学生中的男孩子和女孩子):
.student > .boys, .student > .girls,
4.4 按次序选择子元素
使用 span:nth-child(n)
选择第 n 个 span 元素;
使用 span:nth-last-child(n)
选择倒数第 n 个 span 元素;
REFERENCE: