1. 程式人生 > >Selenium2+python自動化29-js處理多窗口

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

自動 ttr nts class height web from keys webdriver

前言

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

本篇僅提供解決問題的辦法和思路,不要完全照搬代碼!!!

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