Selenium3+python3自动化(十一)--多窗口/标签页、句柄(handle);js将多窗口设置为一个窗口

前言

有些页面的链接打开后,会重新打开一个窗口/标签页,对于这种情况,屏幕会聚焦在新窗口或新标签页上,但WebDriver 不知道操作系统认为哪个窗口是活动的。要使用新窗口,您需要切换到它。获取窗口的唯一标识用句柄表示,所以只需要切换句柄,我们就能在多个页面上灵活自如的操作了。当然,我们也可以通过js修改元素属性,最终让新打开的链接在一个窗口打开。

一、识别多窗口

1.打开百度:https://www.baidu.com/,点击新闻按钮会发现右边多了一个窗口标签。

 

 2.我们使用代码去操作,打开的网页也是这样的(一个窗口多个标签页)

 二、获取当前窗口/标签页句柄

1.元素有属性,浏览器的窗口其实也有属性的,只是你看不到,浏览器窗口的属性用句柄(handle)来识别。

2.人为操作的话,可以通过眼睛,识别不同的窗口点击切换。但是脚本没长眼睛,它不知道你要操作哪个窗口,这时候只能使用句柄来判断了。

3.获取当前页面的句柄:driver.current_window_handle

# coding:utf-8
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("https://www.baidu.com")
driver.implicitly_wait(10)
h=driver.current_window_handle
print(h)
driver.find_element_by_link_text("新闻").click()
print(driver.current_window_handle)

 运行结果:

CDwindow-59FD4DB806265FFBC646EF8369EB2353
CDwindow-59FD4DB806265FFBC646EF8369EB2353 

 三、获取所有句柄

1.定位新闻按钮,并点击

2.点击后,获取当前所有的句柄:window_handles

# coding:utf-8
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("https://www.baidu.com")
driver.implicitly_wait(10)
h=driver.current_window_handle
print(h)
driver.find_element_by_link_text("新闻").click()
nh=driver.window_handles
print(nh,nh[1])  

 运行结果

CDwindow-5F5B9CC310D6704D328C0CD268FE0381
['CDwindow-5F5B9CC310D6704D328C0CD268FE0381', 'CDwindow-06CC09C03B9DB58F9E9415B0D98247E1'] CDwindow-06CC09C03B9DB58F9E9415B0D98247E1

四、切换句柄

直接从所有窗口句柄中,取出第n个句柄的值 nh[1]

如上面代码

五、关闭新窗口,切回主页

1.打开新页面后,其实只想验证新页面跳转对不对,这里可以做个简单的验证,获取当前页面的title验证

2.验证完后,关闭新窗口

3.切回句柄到首页

4.打印当前页面的句柄,看是否切换到首页了

# coding:utf-8
from selenium import webdriver
import time
driver=webdriver.Chrome()
driver.get("https://www.baidu.com")
driver.implicitly_wait(10)
h=driver.current_window_handle
print(h)
driver.find_element_by_link_text("新闻").click()
nh=driver.window_handles
print(nh,nh[1])
driver.switch_to.window(nh[1])
print(driver.title)
time.sleep(3)
#关闭新窗口
driver.close()
#切换到首页句柄
driver.switch_to.window(h)
#打印当前的title
print(driver.title)  

 运行结果

CDwindow-130EA160DA8FDEE09BB98D9656D5D87B
['CDwindow-130EA160DA8FDEE09BB98D9656D5D87B', 'CDwindow-C679162F61EB91A181A02B15248593FC'] CDwindow-C679162F61EB91A181A02B15248593FC
百度新闻——海量中文资讯平台
百度一下,你就知道  

 六、打开百度,点击新闻,出现窗口多标签情况,查看新闻按钮元素属性:target=“_blank”

 

 七、这里用到js的定位方法,定位该元素的class属性,定位到元素后,去掉target属性 或修改target属性值为空,执行代码发现,只打开了一个窗口标签

#coding:utf-8
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("https://www.baidu.com")
# js='document.getElementsByClassName("mnav c-font-normal c-color-t")[0].removeAttribute("target")'
js='document.getElementsByClassName("mnav c-font-normal c-color-t")[0].target=""'
driver.execute_script(js)
driver.find_element_by_link_text("新闻").click()

 

 

posted on 2020-08-29 12:09  星空6  阅读(536)  评论(0编辑  收藏  举报

导航