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

前言html

在打開頁面上連接的時候,常常會彈出另一個窗口(多窗口狀況前面這篇有講解:Selenium2+python自動化13-多窗口、句柄(handle)),這樣在多個窗口之間來回切換比較複雜,那麼有沒有辦法讓新打開的連接在一個窗口打開呢?java

要解決這個問題,得從html源碼上找到緣由,而後修改元素屬性才能解決。很顯然js在這方面是萬能的,因而本篇得依靠萬能的js大哥了。node

1、多窗口狀況python

    1.在打baidu的網站連接時,會從新打開一個窗口web

    (注意:個人百度頁面是已登陸狀態,沒登陸時候是不會從新打開窗口的)學習

 

2、查看元素屬性:target="_blank"網站

1.查看元素屬性,會發現這些連接有個共同屬性:target="_blank"spa

3、去掉target="_blank"屬性htm

1.由於此連接元素target="_blank",因此打開連接的時候會從新打開一個標籤頁,那麼解決這個問題,去掉該屬性就能夠了。blog

2.爲了驗證這個問題,能夠切換到html編輯界面,手動去掉「_blank」屬性

3.刪除「_blank」屬性後,從新打開連接,這時候會發現打開的新連接會在原標籤頁打開。

4、js去掉target="_blank"屬性

1.第一步爲了先登陸,我這裏加載配置文件免登陸了(不會的看這篇:Selenium2+python自動化18-加載Firefox配置

2.這裏用到js的定位方法,定位該元素的class屬性

3.定位到該元素後直接修改target屬性值爲空

5、參考代碼

# 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版本)

 

相關文章
相關標籤/搜索