1. 程式人生 > >Selenium2+python自動化-窗口多標簽處理方法總結(轉載)

Selenium2+python自動化-窗口多標簽處理方法總結(轉載)

left 內置 drive sele 瀏覽器中 height sre 對象 處理方法

本篇轉自博客:上海-小T

原文地址:https://i.cnblogs.com/EditArticles.aspx?opt=1

我們在用Selenium遇到多個瀏覽器窗口或單個瀏覽器多個標簽(Tab)的狀況時,往往都不太好處理,這裏將介紹兩種處理方法。

本文所引用的例子是百度,在百度首頁下方有一個“把百度設為主頁”的超鏈接,點擊它會另起一個新標簽頁,是一個不錯的例子:

技術分享圖片

技術分享圖片

1、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屬性:

技術分享圖片

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上有詳細的用法。

Selenium2+python自動化-窗口多標簽處理方法總結(轉載)