目录
页面等待:
很多页面使用Ajax技术,但是程序不能确定何时某个程序完全加载出来。如果页面等待时间过长导致某个元素没有出来,但是代码已经使用了这个WebElement,那么就会抛出NuilPointer的异常,等待就是解决这个问题。
1.隐式等待
使用driver.implicitly_wait(),在获取不可用元素之前,会等待10s时间。
from selenium import webdriver
import time
from selenium.webdriver.common.by import By
driver_path=r"D:\Python_pycharm\PyCharm Community Edition 2018.3.5\chromedriver.exe"#自己的路径
driver=webdriver.Chrome(executable_path=driver_path)
driver.get('https://www.douban.com/')
driver.implicitly_wait(10)
driver.find_element_by_id('hlhvb.fghk')
隐形等待是设置了一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间截止,然后执行下一步。注意这里有一个弊端,那就是程序会一直等待整个页面加载完成,也就是一般情况下你看到浏览器标签栏那个小圈不再转,才会执行下一步,但有时候页面想要的元素早就在加载完成了,但是因为个别js之类的东西特别慢,我仍得等到页面全部完成才能执行下一步,我想等我要的元素出来之后就下一步怎么办?有办法,这就要看selenium提供的另一种等待方式——显性等待wait了。但要注意这个对于diver的整个周期都有效,设置一次即可。
2.显式等待
WebDriverWait(),配合该类的until()和until_not()方法,就能够根据判断条件而进行灵活地等待了。它主要的意思就是:程序每隔xx秒看一眼,如果条件成立了,则执行下一步,否则继续等待,直到超过设置的最长时间,然后抛出TimeoutException。
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_path=r"D:\Python_pycharm\PyCharm Community Edition 2018.3.5\chromedriver.exe"
driver=webdriver.Chrome(executable_path=driver_path)
driver.get('https://www.douban.com/')
element=WebDriverWait(driver,10).until(EC.presence_of_element_located((By.ID,'code')))
print(element)
页面切换
有时候窗口中很多tab页面,当需要切换的时候,selenium提供了switch_to_window来进行切换。
1.打开两个页面 2.切换到第二个页面
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_path=r"D:\Python_pycharm\PyCharm Community Edition 2018.3.5\chromedriver.exe"
driver=webdriver.Chrome(executable_path=driver_path)
driver.get('https://www.douban.com/')
driver.execute_script("window.open('https://www.baidu.com/')")
print(driver.window_handles)
driver.switch_to.window(driver.window_handles[1])
print(driver.current_url)

driver.window_handles里面是按照窗口打开的顺序,从0开始,排列存储的窗口句柄。
本文介绍Selenium中隐式等待与显式等待的使用方法,以及如何通过WebDriverWait结合expected_conditions灵活等待页面元素加载。同时,讲解了如何在多个窗口间进行切换。
1315

被折叠的 条评论
为什么被折叠?



