Selenium2+python自動化29-js處理多窗口


前言

在打開頁面上鏈接的時候,經常會彈出另外一個窗口(多窗口情況前面這篇有講解: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版本)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM