前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2018年python3与selenium教程第3节切换Frame延时等待

2018年python3与selenium教程第3节切换Frame延时等待

作者头像
章鱼喵
发布2018-09-26 18:01:21
1.1K0
发布2018-09-26 18:01:21
举报
文章被收录于专栏:codingcoding

继上篇 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")>

更多用法详见 官方文档

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.08.30 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 切换Frame
  • 延时等待
    • 隐式等待
      • 显式等待
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档