如何在Python的Selenium WebDriver中禁止链接在新标签页打开
强制Selenium在当前标签页打开带
target="_blank"的链接 嘿,我来帮你搞定这个问题!当页面里的链接都带target="_blank"属性时,Selenium点击后总会弹新标签页,确实有点麻烦。这里有几个实用的办法,能让这些链接乖乖在当前标签页打开:
方法1:用JavaScript移除所有链接的target属性
这种方法一劳永逸,直接修改页面上所有a标签的属性,移除target="_blank",之后再点击任何链接都会在当前页打开:
修改你的代码如下:
from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC url = 'http://www.delhicourts.nic.in/DLCIS-2016-2.html' driver = webdriver.Chrome() wait = WebDriverWait(driver, 10) driver.get(url) # 执行JS移除所有a标签的target属性 driver.execute_script(""" const links = document.querySelectorAll('a'); links.forEach(link => { if (link.hasAttribute('target')) { link.removeAttribute('target'); } }); """) try: # 现在点击链接会在当前标签页打开 wait.until(EC.presence_of_element_located((By.CLASS_NAME, "submit1"))).click() except Exception as e: print(str(e))
方法2:直接获取链接地址并用driver.get()跳转
如果你只需要处理特定的链接,不用修改所有标签,可以先获取目标链接的href属性,然后直接用driver.get()跳转到该地址,这样也会在当前标签页打开:
from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC url = 'http://www.delhicourts.nic.in/DLCIS-2016-2.html' driver = webdriver.Chrome() wait = WebDriverWait(driver, 10) driver.get(url) try: # 定位到目标元素,获取它的href属性 target_link = wait.until(EC.presence_of_element_located((By.CLASS_NAME, "submit1"))) link_url = target_link.get_attribute('href') # 直接用driver.get跳转,在当前标签页打开 driver.get(link_url) except Exception as e: print(str(e))
这两种方法都能解决你的问题,方法1适合需要处理页面大量链接的场景,方法2更适合只处理单个特定链接的情况,你可以根据自己的需求选择~
内容的提问来源于stack exchange,提问作者Kiran
相关产品推荐
相关产品推荐

