八种元素基本定位方法:
1.根据元素id属性定位元素(重点)
element = driver.find_elemet_by_id('')
2.根据class属性定位元素 (通常不用,因为找到的元素可能不唯一)
element = driver.find_element_by_class_name('')
3.根据标签名定位元素 (通常不用,因为找到的元素可能不唯一)
element = driver.find_element_by_tag_name('input')
4.通过链接标签的(a)的文本去查找(不常用)
element = driver.find_element_by_link_text('新闻')
5.通过链接标签的(a)的文本去查找(部分匹配)(不常用)
element = driver.find_element_by_partial_link_text('新')
6.通过元素的name属性定位元素(不常用)
element = driver.find_element_by_name('')
7.通过xpath定位表达式查找元素(重点-定位元素特别精准)
浏览器支持在F12,查看源代码处直接copy表达式xpath语句,有绝对路径和相对路径(ctrl+f 验证)
element = driver.find_element_by_xpath('')
8.通过css定位表达式查找元素
element = driver.find_element_by_css_selector('')
强制等待:time.sleep()
强制等待是利用python语言自带的time库中的sleep()方法,最简单的等待方式
form time import sleep
time.sleep(5)
脚本一旦执行到该语句sleep(5) 就会睡5s,再执行后面的语句,是一个强制等待的方式,会使整个脚本暂停
缺点:设置时间短了没用,长了又浪费时间
隐式等待:implicitly_wait()
在脚本中我们一般看不到等待语句,但是它会在每个页面加载的时候自动等待;隐式等待只需要声明一次,一般在打开浏览器后进行声明。声明之后对整个drvier的生命周期都有效,后面不用重复声明。
driver = webdriver.Chrome()
driver.implicitly_wait(10)
implicitly_wait()方法用来等待页面加载完成(直观的就是浏览器tab页上的小圈圈转完),implicitly_wait(10),超时时间10s,10秒内一旦加载完成,就执行下一条语句;如果10秒内页面都没有加载完,就超时抛出异常
显式等待: WebDriverWait()
显式等待与隐式等待相对,显式等待必须在每个需要等待的元素前面进行声明。
默认抛出异常为:NoSuchElementException。
该方法需要导入By 、WebDriverWait 、expected_conditions
# 工作中显式等待的写法:(本例表示:最多等30s,每隔0.5s检查一下,直到目标节点符合预期条件--可见)
WebDriverWait(driver, 30, 0.5).until(
EC.visibility_of_element_located((By.XPATH, "//a[text()='新闻']")))
iframe窗口的切换
1、iframe
页面内嵌窗口(html内嵌套html。多窗口就是有多个html文件,所以iframe也要窗口切换)
2、 切到 iframe 页面的常用方法
方法1:索引,适用于只有一个iframe的情况
driver.switch_to.frame(0)
方法2:name属性
driver.switch_to.frame("iframe的name属性")
方法3:webElement对象
即:先找到要切换的 iframe 元素,
再通过 driver.switch_to.frame(iframe_el) 切换窗体
版权归原作者 Ther653 所有, 如有侵权,请联系我们删除。