获取断言+元素等待+xpath 高级
获取到百度页面的url去做判断是否和获取到的百度url一样
# -*- coding: utf-8 -*-
# @Author:lsf
# @File:1获取断言
# @Time:2021/7/15
# @Email:
# @Software:PyCharm
# 先导入 selenium的包
from selenium import webdriver
# 得到一个 driver对象
driver = webdriver.Chrome()
driver.get('https://www.baidu.com/')
# 获取浏览器当前url最断言判断
current_url = driver.current_url
assert 'https://www.baidu.com/' == current_url
# 获取元素属性的值
ele = driver.find_element_by_id('kw')
textEle = ele.get_attribute('name')
print(textEle)
# 获取当前页面的标题
print('获取当前页面的标题', driver.title)
# 获取文本信息使用 text
ele1 = driver.find_element_by_name('tj_briicon')
print('获取当前元素的text的值:', ele1.text)
# 关闭浏览器驱动
driver.quit()
元素等待分为3个
第一个强制性等待
"""
强制性等待
这种等待为你有没有找到元素都会强制性等待5秒
"""
time.sleep(4)
隐士等待
from selenium import webdriver
# 得到一个 driver对象
driver = webdriver.Chrome()
"""
隐士等待
假如第三秒的时候找到了这个元素则会在第三秒等待结束、如果5秒内没有找到元素则会报错
隐士等待作用域为凡是在隐士等待后面的定位元素都会生效
"""
driver.implicitly_wait(5)
driver.find_element_by_id()
driver.find_element_by_id()
显示等待
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
# 得到一个 driver对象
driver = webdriver.Chrome()
"""
显示等待
WebDriverWait需要三个参数、一个是driver驱动对象、一个是等待时间、另外一个是轮询时间
EC.visibility_of_element_located((By.ID, 'kw'))需要的参数是一个元组
假如在第10秒找到元素则结束、如果超过20秒还没找到则报错
"""
WebDriverWait(driver=driver, timeout=20, poll_frequency=0.5).until(
EC.visibility_of_element_located((By.ID, 'kw'))
)
xpath 高级用法
# -*- coding: utf-8 -*-
# @Author:lsf
# @File:3xpath高级语法
# @Time:2021/7/16
# @Email:
# @Software:PyCharm
"""
/ 的意思为从最顶层开始查找
// 的意思为从任意节点查找
.选取当前节点
..选取父节点
@ 选取属性
注意:当你使用 父元素.find_element_by_xpath 这种方式定位的时候,元素定位表达式必须以点开头,如
ele = driver.find_elements_by_xpath("//div[@id='category-block']//ol/li")
b = ele.find_elements_by_xpath('.//li[@class=\'subcate-item\']//span')
"""
"""
根据标签属性进行定位
a[class="s-tab-item s-tab-news"]
"""
"""
元素以什么什么开头
//input[starts-with(@id,"k")]
"""
"""
包含语法
//input[contains(@id,'k')]
"""
"""
其它定位元素
parent 选取当前节点的父节点
//input[starts-with(@id,"k")]/parent::span
ancestor 选取当前节点的所有父元素和祖父
//input[starts-with(@id,"k")]/ancestor::span
ancestor-or-self::span 选取当前节点的所有父元素和祖父以及当前元素本身
descendant 获取当前元素的所有后代元素
.cr-content/descendant::div
descendant-or-self::div 获取当前元素的所有子元素以及本身
.cr-content/descendant-or-self::div
preceding 获取当前元素之前的所有元素
preceding-sibling 获取当前元素之前的所有同级别元素
following 获取当前元素之后的所有元素
following-sibling 获取当前元素之后的所有同级别元素
"""
"""
xpath效率很低、因为是查找的全页面元素
"""