Selenium基础(五):目标验证&元素等待

目标验证

selenimun中几种常用的验证信息方法:title、current_url、text。

  • title:获取当前页面的标题
  • current_url:获取当前页面的url
  • text:获取当前页面的文本信息

以百度为例,验证点击【hao123】后是否跳转到正确的hao123页面

#-*-encoding:utf-8-*-
from selenium impor twebdriver

driver=webdriver.Firefox()
driver.get("https://www.baidu.com")
first_title=driver.title
print("The first page is:%s"%first_title)

driver.find_element_by_xpath("/html/body/div[1]/div[1]/div/div[3]/a[2]").click()
second_title=driver.title
print("The second page is:%s"%second_title)

expect_tltle="hao123_上网从这里开始"
if second_title == expect_tltle:
    print(True)

元素等待

WebDriver提供了两种类型的元素等待:显示等待、隐式等待

  1. 显示等待(WebDriverWait类),使WebDriver等待某个条件成立时继续执行,否则在达到最大时间长时抛出超出时间异常
#*********
# 显示等待,WebDriverWait
#*********

from selenium import webdriver
from selenium.webdriver.common.byimportBy
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver=webdriver.Firefox()
driver.get("https://www.baidu.com")

elelement=WebDriverWait(driver,5,0.5).until(EC.presence_of_element_located((By.ID,'kw')))
elelement.send_keys('Bela')

driver.find_element_by_xpath("//*[@id='su']").click()
driver.quit()

说明:显示等待是单独针对某个元素,设置一个等待时间如5秒,每隔0.5秒检查一次是否出现,如果在5秒之前任何时候出现,则继续向下,超过5秒尚未出现则抛异常

  1. 隐式等待(implicitly_wait),通过一定时长的等待页面上元素加载完成。如果超出了设置的时长,元素还未被加载,则抛出异常NoSuchElementException
#*********
#隐式等待
#*********

from selenium import webdriver
from elenium.common.exceptions import NoSuchElementException
from time import sleep,ctime

driver=webdriver.Firefox()
#implicitly_wait是隐式等待
#判断某元素,如果超过10秒未发现,则抛出异常
#如果在10秒内发现,则对该元素进行操作
driver.implicitly_wait(10)
driver.get("https://www.baidu.com")

try:
    print(ctime())
    driver.find_element_by_xpath("//*[@id='kww']").send_keys('Bela')
    driver.find_element_by_xpath("//*[@id='su']").click()
except NoSuchElementException as e:
    print(e)
finally:
    print(ctime())

说明:隐式等待是全局的是针对所有元素,设置等待时间如10秒,如果10秒内出现,则继续向下,否则抛异常。可以理解为在10秒以内,不停刷新看元素是否加载出来。

显示等待和隐式等待的区别:

  • 显示等待针对某个元素,需要在每个等待的元素面前进行声明
  • 隐式等待针对所有元素,一般在打开浏览器后进行声明。对整个driver的声明周期都有效,后面不用重复声明
  • 隐式等待缺点:脚本会一直等待整个页面的加载完成,但是有时候 页面的元素早加载完成,而浏览器比如JS内容加载较慢,而此时也需要等待

3.强制等待:
time.sleep(3)
用以设置固定的线程休眠时间(s),使得整个脚本暂停。但是这种方式会导致这个脚本运行时间过长,不到万不得已尽可能少用,特殊情况下,时间设置最好不超过1秒,一般0.5秒

posted @ 2022-05-24 16:05  是小鱼呀  阅读(111)  评论(0)    收藏  举报