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

posted @ 2021-01-12 21:22  xyztank  阅读(2855)  评论(0编辑  收藏  举报