003 selenium iframe/等待
''' 时间:2018/11/29 功能:iframe/等待 目录: 一: 登录禅道 二: iframe 1 单个iframe - name定位 9 多个iframe - 索引定位 3 跳转iframe 三: 等待 1 隐式等待 2 显示等待 3 sleep 四: 登录126 '''
一: 登录禅道
from selenium import webdriver import time driver = webdriver.Firefox() driver.get("http://127.0.0.1/zentao") time.sleep(1) driver.find_element_by_id("account").send_keys("admin") driver.find_element_by_name("password").send_keys("123456") driver.find_element_by_id("keepLoginon").click() time.sleep(2) driver.find_element_by_id("submit").click()
二: iframe
1 单个iframe - name定位
<html> <!DOCTYPE html> <head> <meta charseti="UTF-8"> <title> iframe demo</title> </head> <body> <iframe src="https://www.baidu.com" width="1000" height="600"> </iframe> </body> </html>
1 : 保存桌面命名为 test_iframe.html 。
from selenium import webdriver import time driver = webdriver.Firefox() driver.get("file:///C:/Users/Administrator/Desktop/test_iframe.html") time.sleep(1) # 切入iframe ifame_baidu = driver.find_element_by_tag_name("iframe") driver.switch_to.frame(ifame_baidu) driver.find_element_by_id("kw").send_keys(u"汁虫 博客园") driver.find_element_by_id("su").click()
2 多个iframe - 索引定位
<html> <!DOCTYPE html> <head> <meta charseti="UTF-8"> <title> iframe demo</title> </head> <body> <iframe src="test_iframe.html" width="1000" height="600"> </iframe> </body> </html>
1 : 保存桌面命名为 test_iframe_v2.html 。
from selenium import webdriver import time driver = webdriver.Firefox() driver.get("file:///C:/Users/Administrator/Desktop/test_iframe_v2.html") # 切入iframe - 第一层 time.sleep(1) ifame_baidu = driver.find_elements_by_tag_name("iframe")[0] driver.switch_to.frame(ifame_baidu) # 切入iframe - 第二层 ifame_baidu_v2 = driver.find_element_by_tag_name("iframe") driver.switch_to.frame(ifame_baidu_v2) driver.find_element_by_id("kw").send_keys(u"汁虫 博客园") driver.find_element_by_id("su").click()
3 跳转iframe
# 跳出所有frame,回到主界面: driver.switch_to_default_content() # 返回上一级iframe: driver.switch_to.parent_frame()
三: 等待
1 隐式等待
隐式等待: 通过一定的时长等待页面上某元素加载完成,如果超过设置的时长元素还没有被加载,则抛出 NoSuchElementException异常
from selenium import webdriver import time driver = webdriver.Firefox() driver.get("https://www.hao123.com") # 获取句柄 - 当前窗口 time.sleep(2) driver.implicitly_wait(8) cur_handle = driver.current_window_handle print(cur_handle) driver.find_element_by_link_text("人民网").click() # 获取句柄 - 所有窗口 driver.implicitly_wait(8) all_handle = driver.window_handles print(all_handle) # 获取句柄 - 最新窗口 new = all_handle[-1] driver.switch_to.window(new) print(driver.title) # 切换窗口 - 开始窗口 driver.switch_to.window(all_handle[0]) print(driver.title)
{0eb6de3e-0664-42a2-ae01-88aa2d5b4e6b} ['{0eb6de3e-0664-42a2-ae01-88aa2d5b4e6b}', '{ab6c327a-c2ee-41d3-ae05-292e5f37f94e}'] 人民网_网上的人民日报 hao123_上网从这里开始
2 显示等待
显示等待: WebDriver等待某个条件成立时时间,否则在达到最大时间抛出 TimeoutException异常
# coding:utf-8 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 driver = webdriver.Firefox() # 启动浏览器 - Firefox driver.get("https://www.baidu.com") # 访问url - 百度 element = WebDriverWait(driver, 3, 0.5).until( EC.presence_of_element_located((By.ID, "kw")) ) driver.find_element_by_id("kw").send_keys("汁虫 博客园") # 定位 - 百度搜索框; 操作 - 键盘输入; 数据 - 汁虫 博客园 driver.find_element_by_id("su").click() # 定位 - 百度按钮; 操作 - 鼠标点击; 数据 - 无 driver.quit() # 退出程序
1 : WebDriverWait - 等待三秒,每0.5秒检查一次。判断结果为True(until_not为False),判断条件为presence_of_element_located(判断元素是否存在)。
3 sleep
sleep休眠: 脚本执行到某一位置做固定时间的休眠
作用:一般用打开链接、页面跳转、测试脚本
# coding:utf-8 from selenium import webdriver import time driver = webdriver.Firefox() # 启动浏览器 - Firefox driver.get("https://www.baidu.com") # 访问url - 百度 # 步骤: 定位 + 操作 + 数据 time.sleep(2) driver.find_element_by_id("kw").send_keys("汁虫 博客园") # 定位 - 百度搜索框; 操作 - 键盘输入; 数据 - 汁虫 博客园 driver.find_element_by_id("su").click() # 定位 - 百度按钮; 操作 - 鼠标点击; 数据 - 无 time.sleep(3) driver.quit() # 退出程序
四: 登录126
from selenium import webdriver import time driver = webdriver.Firefox() driver.get("https://mail.126.com/") time.sleep(2) driver.find_element_by_id("lbNormal").click() # 方法1 # driver.switch_to.frame(2) # 方法2 f = driver.find_elements_by_tag_name("iframe")[0] driver.switch_to.frame(f) driver.find_element_by_name("email").send_keys("111111") driver.find_element_by_name("password").send_keys("123456") driver.find_element_by_id("dologin").click() # 点登陆按钮