####################################
# 多窗口切换 ,switch_to.window() #
####################################
from selenium import webdriver
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
from time import sleep
#调用火狐浏览器
binary = FirefoxBinary('D:\\安装软件\\火狐浏览器\\firefox.exe')
driver = webdriver.Firefox(firefox_binary=binary)
#隐式等待
driver.implicitly_wait(10)
driver.get("http://www.baidu.com")
#获得百度搜索句柄
baidu= driver.current_window_handle
print(baidu)
#点击登录按钮
driver.find_element_by_xpath("html/body/div[2]/div/div/div[3]/a[7]").click()
driver.find_element_by_link_text("立即注册").click()
sleep(2)
#获得当前所有打开的窗口
all_handles = driver.window_handles
#进入注册界面:
for handle in all_handles:
if handle != baidu:
driver.switch_to.window(handle)
zcjm = driver.current_window_handle
print(zcjm)
print("now sreach window")
driver.find_element_by_link_text("《百度用户协议》").click()
sleep(3)
#获得当前所有打开的窗口
all_handles = driver.window_handles
#进入百度用户协议界面
for handle in all_handles:
if handle != baidu and handle !=zcjm:
driver.switch_to.window(handle)
print("即将进入百度协议")
driver.find_element_by_link_text("《百度钱包用户协议》").click()
print("进入百度协议")
sleep(2)
#关闭当前浏览器,用户协议界面
driver.close()
sleep(3)
#进入到百度界面
driver.switch_to.window(baidu)
driver.find_element_by_id("kw").send_keys("哈哈哈")
sleep(3)
#关闭当前浏览器,百度搜索界面
driver.close()
sleep(3)
#关闭整个浏览器
driver.quit()
当有多个窗口打开并需要来回切换的时候,注意点:
1.用driver.current_window_handle获取当前窗口的句柄并且赋予变量XXX
2.当进入另外一界面的时候,加一个判断:如果不等于
3.只有进入到该页面才能对该页面进行操作
4.如果driver.close() ,关闭的是当前的页面
5.driver.close(XXXX)可以实现,跨窗口关闭
6.driver.quit() 关闭整个浏览器
7.使用driver.switch_to.window(XXX),进入到该句柄的界面