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