標籤:href current Python自動化 介紹 logs 百度 nts rip 遇到
本篇轉自部落格:上海-小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自動化-視窗多標籤處理方法總結(轉載)