1-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
- switch_to.window,切换窗口,替换
- 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