1.元素选择
(1)根据id选择(id必须唯一的)
# 根据id选择元素,返回的就是该元素对应的WebElement对象,对象可操作页面元素
element = driver.find_element(By.ID, 'id_value')
# 通过该 WebElement对象,就可以对页面元素进行操作了
element.send_keys('通讯\n')
(2)根据class属性
#因为类名可能不唯一,查找所有元素;否则element只返回第一个
driver.find_elements(By.CLASS_NAME, 'animal')
for element in elements:
print(element.text)
【多class属性解决方式】
- 若 有两个class属性, 分别是 chinese 和 student,而不是 chinese student属性
- 解决:指定任意一个class 属性值
(3)根据tag名选择
如<input xx>标签,input即tag名
(4)根据xpath选择
有很多xpath提取工具,了解下即可
(5)通过WebElement对象选择元素内部子元素
element = wd.find_element(By.ID,'container')
# 限制选择元素的范围是 id 为container元素的内部。
spans = element.find_elements(By.TAG_NAME, 'span')
for span in spans:
print(span.text)
(6)显示等待和隐式等待
- WebDriverWait(dr,10)的意思是10秒内每隔0.5秒扫描1次页面变化,直到出现指定的元素后结束,否则抛出异常。
- 隐式在全局起作用,即直到退出都要自动完成。 缺点不适合ajax局部加载 (一直判断找不到重新扫描),一般用于判断登录是否成功。
- try-except:有时候显示和隐式都无法解决时候,直接用异常包围处理逻辑,例如js
(7)判断元素存在解决方法
- try-except
- elment.is_XXX(); //判断是否存在
- 隐式/显示等待元素出现: 如果找不到元素, 每隔半秒 再去界面上查看一次, 直到找到该元素,或过了最大时长(10秒)
(8)selenium 4版本更新变化
2.元素操作
(1)输入框输入和清除操作
注输入框内文字无法通过text获取,见(2)
(2)获取元素属性
①获取元素文本信息(展示在页面的内容)
- (√推荐)
- get_attribute('innerText')或 get_attribute('textContent')
- 元素可见文本内容
- 所有内容(包括display属性为none的部分)
②get_attibute('tag_name') 获取元素标签内属性
③获取整个元素对应html语法
- 获取整个元素对应html语法: element.get_attribute(' outerHTML')
- 获取内部html语法: element.get_attribute( 'innerHTML')
④获取输入框