继上篇 2018年python3与selenium教程第2节
切换Frame
iframe
源码
代码语言:javascript复制from selenium import webdriver
import time
from selenium.common.exceptions import NoSuchElementException
browser = webdriver.Chrome() # 声明浏览器
url = 'http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable'
browser.get(url) # 访问网页
browser.switch_to.frame('iframeResult') # 切换到iframe
try:
logo = browser.find_element_by_class_name('logo')
except NoSuchElementException:
print('NO LOGO')
browser.switch_to.parent_frame() # 回到主html
logo = browser.find_element_by_class_name('logo')
time.sleep(2)
print(logo)
print(logo.text)
browser.close() # 关闭浏览器
结果
代码语言:javascript复制☁ crawler python3 test_selenium.py
NO LOGO
<selenium.webdriver.remote.webelement.WebElement (session="8fb4596c155db901ddff0223f20889e3", element="0.9509151682616779-2")>
RUNOOB.COM
延时等待
get()方法会在网页框架加载完成后结束执行,此时的网页源码可能并不完整,如有些是ajax获取的数据,需要延时等待才能获取到
等待的方式:1.隐式等待 2.显式等待
隐式等待
若selenium没在DOM中找到节点,将继续等待,超出设定的时间后,抛出找不到节点的异常
源码
代码语言:javascript复制from selenium import webdriver
import time
browser = webdriver.Chrome() # 声明浏览器
browser.implicitly_wait(3) # 隐式等待3秒
url = 'https://www.zhihu.com/explore'
browser.get(url)
button = browser.find_element_by_class_name('zu-top-add-question')
print(button)
time.sleep(2)
browser.close() # 关闭浏览器
结果
代码语言:javascript复制☁ crawler python3 test_selenium.py
<selenium.webdriver.remote.webelement.WebElement (session="5a3262b7f812140d1b264511390bc519", element="0.95877441085998-1")>
显式等待
指定要查找的节点,在指定的最长等待时间内,如果加载出了节点,就返回此节点;否则抛出超时异常
源码
代码语言:javascript复制from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
browser = webdriver.Chrome() # 声明浏览器
url = 'https://www.zhihu.com/explore'
browser.get(url)
wait = WebDriverWait(browser, 3) # 显式等待
button = wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'zu-top-add-question')))
print(button)
time.sleep(2)
browser.close() # 关闭浏览器
结果
代码语言:javascript复制☁ crawler python3 test_selenium.py
<selenium.webdriver.remote.webelement.WebElement (session="299f7cc8d3e8713a7fbeff6bd90da8b0", element="0.45868114911518987-1")>
更多用法详见 官方文档