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()   # 点登陆按钮
原文地址:https://www.cnblogs.com/huafan/p/10037541.html