selenium隐式和显式等待、打开和切换多窗口

隐式等待

先等待指定时间后,再操作后面

# driver.implicitly_wait(10)
# driver.find_element_by_id('ss')

显式等待

根据条件来判定什么时候操作

element = WebDriverWait(driver,10).until(
    ec.presence_of_all_elements_located((By.ID,'kw'))
)
  • 源代码
from selenium import webdriver
#等待时间
from selenium.webdriver.support.ui import WebDriverWait
#期望的条件
from selenium.webdriver.support import  expected_conditions as ec
from selenium.webdriver.common.by import By
driver = webdriver.Firefox()
driver.get("https://www.baidu.com")
#隐式等待,直接设置等待值,时间过后再进行下一步操作
# driver.implicitly_wait(10)
# driver.find_element_by_id('ss')
#
element = WebDriverWait(driver,10).until(
    ec.presence_of_all_elements_located((By.ID,'kw'))
)
print(element)

运行结果

[]
  • 需要注意到是
#参数是一个元祖,要注意括号
ec.presence_of_all_elements_located((By.ID,'kw'))

打开多个页面

在同一个浏览器中打开多个页面
直接先后用driver.get打开,后面网页会替换掉前面的网页

from selenium import webdriver
driver = webdriver.Firefox()
#先打开百度
driver.get("https://www.baidu.com")
# driver.execute_async_script('window.open("https://www.sogou.com/")')
driver.execute_script('window.open("https://www.sogou.com/")')
#通过这种方式打开,后面的会替换掉前面的网页
print(driver.current_url)

注意,虽然打开了新网页,但是当前网页还是第一个

切换页面

driver.window_handles是窗口句柄driver.switch_to.window(driver.window_handles[n])来对窗口进行切换

from selenium import webdriver
import time
driver = webdriver.Firefox()
#先打开百度
driver.get("https://www.baidu.com")
# driver.execute_async_script('window.open("https://www.sogou.com/")')
driver.execute_script('window.open("https://www.sogou.com/")')
print(driver.current_url)
#切换页面
print(driver.window_handles)
driver.switch_to.window(driver.window_handles[1])
#这个时间延迟有时候很重要,不然浏览器来不及反映,可能得到的网页还是空值,实际上窗口已经切换
time.sleep(1)
print(driver.current_url)

你可能感兴趣的:(selenium隐式和显式等待、打开和切换多窗口)