好,操作浏览器标签的姊妹篇,操作浏览器窗口来了。
补充点知识:
有的文章写了
这条js语句在新标签打开新页
js = "window.open('https://www.sogou.com')"下面这条语句在新窗口打开新页
js = "window.open('https://www.sogou.com','_blank')"实测,目前selenium 和 Chrome版本并不支持
一、使用句柄
1、直接使用句柄index值去切(也适用于标签的切换)
知识点:默认打开的第一个窗口句柄是0,第二个是1
driver.switch_to.window(handles[0])
from selenium import webdriver from time import sleep driver = webdriver.Chrome() driver.get('http://www.baidu.com') js = "window.open('https://www.sogou.com','_blank')" #js打开一个新窗口,打开sogou driver.execute_script(js) #Selenium 执行js #在这里我们手动的将两个标签分离,模拟打开了两个窗口的效果 sleep(5) handles = driver.window_handles driver.switch_to.window(handles[0]) sleep(3) driver.switch_to.window(handles[1]) sleep(3) driver.quit()
2、使用循环判断来切
from selenium import webdriver from time import sleep driver = webdriver.Chrome() driver.get('http://www.baidu.com') js = "window.open('https://www.sogou.com','_blank')" #js打开一个新窗口,打开sogou driver.execute_script(js) #Selenium 执行js #在这里我们手动的将两个标签分离,模拟打开了两个窗口的效果 sleep(5) handle = driver.current_window_handle #这里是搜狗 handles = driver.window_handles driver.switch_to.window(handles[0]) #切回百度 sleep(3) for hle in handles: if hle != handle: #不等于搜狗 driver.switch_to.window(hle) #所以切回搜狗 sleep(3) driver.quit()
现在浏览器貌似点击链接都是在新tab页打开页面(或者本页直接跳转),而不再是弹新窗口。百度了一下跟用户习惯有关系。Chrome没找到设置新窗口打开的位置,Firefox在设置中找到了,但是selenium控制的时候仍然新tab页打开。而之前看的调用js的办法并没有测试成功(知识随着时间真的会“失效”)。但是今天找到一个方法,按住shift键,点击链接,会在新窗口打开页面。
#导入webdriver包
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.ui import WebDriverWait
#实例化一个driver
driver = webdriver.Chrome()
#打开百度,注意前面的http://不能省略
driver.get("http://www.baidu.com")
#定位百度搜索框
ele = driver.find_element_by_link_text('新闻')
ActionChains(driver).key_down(value=Keys.SHIFT).perform()
ele.click()
sleep(2)
driver.quit()