You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Selenium右键无法选择“在新标签页打开链接”选项求助

解决Selenium右键点击无法打开新标签页的问题

嘿,我来帮你搞定这个右键操作的小麻烦~你遇到的情况其实挺常见的,因为Selenium对浏览器原生右键菜单的支持并不太稳定,尤其是不同浏览器、不同语言版本的菜单选项定位起来很棘手。下面给你几个靠谱的解决方案,按推荐程度排序:

方法1:用JavaScript直接打开新标签页(最稳定)

这个方法跳过了模拟点击的步骤,直接获取链接的URL,然后通过JS命令打开新标签,完全不受浏览器菜单的影响,稳定性拉满:

WebDriver driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.navigate().to("https://us.justdial.com/NY/New-York/Afghani-Restaurants/ct-16110200");

WebElement linkElement = driver.findElement(By.xpath("/html/body/div[1]/div[1]/div/section/div[5]/div[2]/div[2]/ul/li[1]/div/div[2]/h2/a"));
// 获取链接的href属性值
String linkUrl = linkElement.getAttribute("href");
// 用JS打开新标签页
((JavascriptExecutor) driver).executeScript("window.open('" + linkUrl + "', '_blank');");

方法2:模拟键盘快捷键(简单可靠)

这和我们手动打开新标签的操作逻辑一致:Windows/Linux用Ctrl+点击,Mac用Cmd+点击,Selenium能很好地模拟这个行为:

WebDriver driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.navigate().to("https://us.justdial.com/NY/New-York/Afghani-Restaurants/ct-16110200");

WebElement linkElement = driver.findElement(By.xpath("/html/body/div[1]/div[1]/div/section/div[5]/div[2]/div[2]/ul/li[1]/div/div[2]/h2/a"));

Actions action = new Actions(driver);
// Windows/Linux环境用Keys.CONTROL,Mac换成Keys.COMMAND
action.keyDown(Keys.CONTROL)
      .click(linkElement)
      .keyUp(Keys.CONTROL)
      .perform();

方法3:模拟右键菜单操作(不推荐,易失效)

如果一定要用右键菜单的方式,你需要通过方向键选中“在新标签页打开”选项再回车,但这个方法很容易因为浏览器更新、语言设置变化而失效——比如不同语言的菜单文本不一样,选项位置也可能改变:

WebDriver driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.navigate().to("https://us.justdial.com/NY/New-York/Afghani-Restaurants/ct-16110200");

WebElement linkElement = driver.findElement(By.xpath("/html/body/div[1]/div[1]/div/section/div[5]/div[2]/div[2]/ul/li[1]/div/div[2]/h2/a"));

Actions action = new Actions(driver);
action.contextClick(linkElement) // 触发右键点击
       .sendKeys(Keys.ARROW_DOWN) // 向下移动选择,次数根据实际菜单位置调整
       .sendKeys(Keys.ARROW_DOWN)
       .sendKeys(Keys.ENTER) // 确认选择
       .perform();

为什么原来的方法不行?

浏览器的右键菜单属于原生系统控件,不是网页DOM元素,Selenium无法直接定位到菜单里的选项,所以单纯用contextClick后没法直接选择“在新标签页打开”,必须依赖方向键模拟,这就导致了操作不稳定的问题。

内容的提问来源于stack exchange,提问作者Jyoti kayle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:23:36