Selenium2+python自動化-窗口多標簽處理方法總結(轉載)
本篇轉自博客:上海-小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自動化-窗口多標簽處理方法總結(轉載)