隐式等待
先等待指定时间后,再操作后面
# 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)
运行结果
[<selenium.webdriver.firefox.webelement.FirefoxWebElement (session="9ec9be8c-3ab6-42db-8635-aa2771ca3df4", element="ca8bf658-1b66-47bd-aa6a-6cf407ddf7df")>]
- 需要注意到是
#参数是一个元祖,要注意括号
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)
网友评论