Real_小T 发表于 2017-4-1 10:31:24

【版主分享】Selenium2(Webdriver)+Python处理浏览器多标签方法二则

本帖最后由 Real_小T 于 2017-4-1 10:33 编辑

我们在用Selenium遇到多个浏览器窗口或单个浏览器多个标签(Tab)的状况时,往往都不太好处理,这里将介绍两种处理方法。本文所引用的例子是百度,在百度首页下方有一个“把百度设为主页”的超链接,点击它会另起一个新标签页,是一个不错的例子:
http://img.blog.csdn.net/20170222234532708?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvUmVhbF9UaW5v/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEasthttp://img.blog.csdn.net/20170223093332079?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvUmVhbF9UaW5v/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast1.switch_to.window()该方法是Webdriver中内置的一个方法,除了在多个浏览器中作切换用,单个浏览器多个标签(Tab)之间的切换也可以用这个方法,思路就是先取得所有标签的句柄,然后循环遍历并判断是否是当前标签页,如果不是则切换。完整代码如下:# encoding:utf-8

from selenium import webdriver

driver = webdriver.Firefox()
driver.get("http://www.baidu.com")
driver.find_element_by_id("setf").click()
handles = driver.window_handles
for handle in handles:
    if driver.current_window_handle != handle:
      driver.switch_to.window(handle)
driver.find_element_by_link_text("百度首页").click()
最后一句点击新标签上的“百度首页”链接操作成功即代表已成功切换标签。2.利用JS清除target值用F12工具查看该超链接,可以查看到有一个target属性:
http://img.blog.csdn.net/20170222234721482?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvUmVhbF9UaW5v/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast
target=_blank意思是在新窗口中打开被链接文档(引自w3school),通俗点解释就是超链接会用过新窗口(新标签)打开,那么将其值清除便可实现点击该超链接后不会另起一个新标签页。利用Document 对象方法查找该id然后将其target的值清除:js = 'document.getElementById("setf").target="";'
JS写完之后执行它,即可达到效果。完整代码如下:# encoding:utf-8

from selenium import webdriver

driver = webdriver.Firefox()
driver.get("http://www.baidu.com")
js = 'document.getElementById("setf").target="";'
driver.execute_script(js)
driver.find_element_by_id("setf").click()
driver.find_element_by_link_text("百度首页").click()
最后一句点击新标签上的“百度首页”链接操作成功即代表已成功切换标签。HTML DOM 定义了多种查找元素的方法,除了 getElementById() 之外,还有 getElementsByName() 和 getElementsByTagName(),在http://www.w3school.com.cn/jsref/dom_obj_document.asp上有详细的用法。

cq520131517 发表于 2017-4-1 11:02:16

必须赞一个,平时并没有注意这么多,只知道能用就好。没有什么具体操作流程。学习啦。。

梦想家 发表于 2017-4-1 12:01:48

赞一个支持一下

清晨一缕阳光 发表于 2017-4-1 12:50:29

支持分享!

龙王神力 发表于 2017-4-6 11:44:05

支持分享,学到了

jingzizx 发表于 2017-5-7 07:24:52

:victory:
页: [1]
查看完整版本: 【版主分享】Selenium2(Webdriver)+Python处理浏览器多标签方法二则