爬虫(14)——selenium的页面等待和页面切换

本文介绍Selenium中隐式等待与显式等待的使用方法,以及如何通过WebDriverWait结合expected_conditions灵活等待页面元素加载。同时,讲解了如何在多个窗口间进行切换。

目录

 

页面等待:

1.隐式等待

2.显式等待

页面切换


页面等待:

很多页面使用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开始,排列存储的窗口句柄。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值