JavaScript當前窗口打開鏈接


JavaScript當前窗口打開鏈接

一、問題

當在單擊網頁鏈接時,會在一個新的窗口中打開鏈接,此時我們只想在當前窗口打開鏈接。對於多窗口的處理,只需要修改target屬性即可。查看“F12”,會發現其target="_blank",然后將_blank去掉即可。

二、示例

比如,打開百度,在當前窗口打開“新聞”鏈接,發現鏈接存在target="_blank",預示着它會在新窗口打開。

直接點擊“新聞”,直接會在新窗口打開

此時想直接在當前窗口打開鏈接,應該怎么辦呢?一種可以直接手動把target="_blank"刪除即可。通過自動化可以參考如下:具體的流程是用傳統定位到“新聞”,然后給當前標簽添加ID屬性,然后再根據原生JS刪除target="_blank"即可。

from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By

class TestBaidu:
    def setup(self):
        self.url = "https://www.baidu.com/"
        self.driver = webdriver.Chrome()
        self.driver.maximize_window()
        self.driver.get(self.url)
        self.driver.implicitly_wait(5)

    def teardown(self):
        sleep(5)
        self.driver.quit()

    def add_attribute(self, selector, attribute_name, value):
        """
        封裝向頁面標簽添加新屬性的方法調用JS給頁面標簽添加新屬性,
        arguments[0]~arguments[2]分別會用后面的element,attributeName和value參數進行替換
        添加新屬性的JS代碼語法為:element.attributeName=value
        比如input.name='test'
        """
        element = self.driver.find_element(*selector)
        self.driver.execute_script("arguments[0].%s=arguments[1]" % attribute_name, element, value)

    def test_locator_by_js(self):
        locator = (By.LINK_TEXT, '新聞')  # LINK_TEXT定位“新聞”
        self.add_attribute(locator,"id","news") #給“新聞”添加ID屬性
        js_of_remove = "document.getElementById('news').target=''"  # 去掉target屬性的JS
        self.driver.execute_script(js_of_remove) # 根據添加的ID屬性“news”,去掉target屬性
        sleep(2)
        self.driver.find_element_by_link_text('新聞').click()

可以看到新添加的屬性id="news"

最后只在當前窗口打開了鏈接。

三、參考

1、xpath定位:https://www.w3school.com.cn/xpath/xpath_syntax.asp

2、css定位:https://www.w3school.com.cn/cssref/css_selectors.asp

3、jQuery 選擇器:https://www.w3school.com.cn/jquery/jquery_selectors.asp


免責聲明!

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



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