Selenium - 窗口切换

前言

一般的窗口切换就是浏览器打开多个窗口,使用selenium在多个窗口中相互切换。除此之外,还会遇到iframe窗口,这种相当于大盒子中嵌套小盒子,对于这种窗口切换,重点就是进入某个盒子,退出某个盒子。知道当前在哪个盒子中,就好搞操作了。

窗口切换

重点:

  • driver.switch_to系列,切换窗口,包括三个常用的方法:
    • switch_to.window,切换窗口,替换switch_to_window
    • switch_to.frame,进入iframe,替换switch_to_frame
    • switch_to.default_content,退出iframe,替换原方法switch_to_default_content
  • window_handles,窗口数组

根据这两个方法组合,就达到切换窗口的目的了。我们来演示一个,从百度入口输入关键字并且点击某个结果(因为点击某个链接,会在新的窗口中打开),然后再切换回来。
代码如下:

import time
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait  # 等待页面加载某些元素
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

# 获取driver
driver = webdriver.Chrome()
wait = WebDriverWait(driver, 10)

try:
    # 发请求
    driver.get('https://www.baidu.com')

    # 定位标签并输入值然后点击
    driver.find_element_by_id('kw').send_keys('听雨危楼-cnblogs')
    time.sleep(1)
    driver.find_element_by_id('su').click()

    # 在新窗口中,点击结果标签
    wait.until(EC.presence_of_element_located((By.LINK_TEXT, '听雨危楼 - 博客园'))).click()
    # driver.find_element_by_link_text('听雨危楼').click()

    # 所有打开的窗口都存在这个数组中
    # print(driver.window_handles)  # ['CDwindow-922052E58B50E4A32401C904D478CC8E', 'CDwindow-AC58D7837A577C8878BE283F554B0E52', 'CDwindow-8196C4B6F2DEAAD7F0AF10DA17BC44ED']
    
    # 根据数组下标索引切换窗口
    time.sleep(3)
    driver.switch_to.window(driver.window_handles[1])
    time.sleep(3)
    driver.switch_to.window(driver.window_handles[0])
    time.sleep(2)
    driver.switch_to.window(driver.window_handles[2])

finally:
    # 关闭浏览器
    time.sleep(3)
    driver.quit()
    # 截止2019-6-11,代码无误

效果如下:

iframe窗口切换

iframe记住两个方法:

  • switch_to.frame(iframe),进入窗口
  • switch_to.default_content(),退出窗口

我们完成一个使用selenium自动发163邮件的程序。
see also:https://www.cnblogs.com/Neeo/articles/11003789.html
效果如下:


欢迎斧正,that's all
posted @ 2019-06-11 15:21  听雨危楼  阅读(1260)  评论(0编辑  收藏  举报