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