前言
在打開頁面上鏈接的時候,經常會彈出另外一個窗口(多窗口情況前面這篇有講解:Selenium2+python自動化13-多窗口、句柄(handle)),這樣在多個窗口之間來回切換比較復雜,那么有沒有辦法讓新打開的鏈接在一個窗口打開呢?
要解決這個問題,得從html源碼上找到原因,然后修改元素屬性才能解決。很顯然js在這方面是萬能的,於是本篇得依靠萬能的js大哥了。
一、多窗口情況
1.在打baidu的網站鏈接時,會重新打開一個窗口
(注意:我的百度頁面是已登錄狀態,沒登錄時候是不會重新打開窗口的)
二、查看元素屬性:target="_blank"
1.查看元素屬性,會發現這些鏈接有個共同屬性:target="_blank"
三、去掉target="_blank"屬性
1.因為此鏈接元素target="_blank",所以打開鏈接的時候會重新打開一個標簽頁,那么解決這個問題,去掉該屬性就可以了。
2.為了驗證這個問題,可以切換到html編輯界面,手動去掉“_blank”屬性
3.刪除“_blank”屬性后,重新打開鏈接,這時候會發現打開的新鏈接會在原標簽頁打開。
四、js去掉target="_blank"屬性
1.第一步為了先登錄,我這里加載配置文件免登錄了(不會的看這篇:Selenium2+python自動化18-加載Firefox配置)
2.這里用到js的定位方法,定位該元素的class屬性
3.定位到該元素后直接修改target屬性值為空
五、參考代碼
# coding:utf-8
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
# 加載配置文件免登錄
profileDir = r'C:\Users\Gloria\AppData\Roaming\Mozilla\Firefox\Profiles\1x41j9of.default'
profile = webdriver.FirefoxProfile(profileDir)
driver = webdriver.Firefox(profile)
driver.get("https://www.baidu.com/")
# 修改元素的target屬性
js = 'document.getElementsByClassName("mnav")[0].target="";'
driver.execute_script(js)
driver.find_element_by_link_text("糯米").click()
注意:並不是所有的鏈接都適用於本方法,本篇只適用於有這個target="_blank"屬性鏈接情況
本篇僅提供解決問題的辦法和思路,不要完全照搬代碼!!!
學習過程中有遇到疑問的,可以加selenium(python+java) QQ群交流:646645429
《selenium+python高級教程》已出書:selenium webdriver基於Python源碼案例
(購買此書送對應PDF版本)