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

如何使用Selenium打开byjus、亚马逊印度站的网页页脚链接

问题根因

  • 子元素XPath写法错误:你在footerDriver下查找子元素时用了//开头的XPath,//会从整个DOM根节点匹配元素,不会限制在你已经定位到的页脚容器范围内,导致实际定位的元素不是页脚内的链接,操作自然无效。正确写法应该是用.//开头,代表从当前节点的子节点中搜索
  • 直接给不可见元素发送Ctrl+Enter无效:页脚元素默认不在视口内,即使你滚动到视图,部分站点的链接元素默认不可聚焦,sendKeys操作不会生效
  • 循环中反复查找元素容易触发StaleElementException:每次循环都调用findElements,如果DOM有刷新,之前找到的元素会直接过期

修复后可运行代码

package WebApps;

import java.util.List;
import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

public class mmt {

    public static void main(String[] args) throws InterruptedException {
        System.setProperty("webdriver.chrome.driver", "D:\\Nav QA Workspace\\Browser Drivers\\chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        driver.manage().window().maximize();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        JavascriptExecutor js = (JavascriptExecutor) driver;

        // 测试byjus站点
        driver.get("https://byjus.com/");
        // 定位页脚容器
        WebElement footerDriver = driver.findElement(By.xpath("//div[@class='universal-footer']"));
        // 滚动到页脚位置
        js.executeScript("arguments[0].scrollIntoView(true);", footerDriver);
        Thread.sleep(1000); // 等待页脚内容渲染完成
        // 限制在页脚内查找第一个ul下的所有a标签,.代表当前节点下搜索
        List<WebElement> footerLinks = footerDriver.findElements(By.xpath(".//div/div/div/div/div[1]/ul//a"));
        System.out.println("byjus页脚第一个区块链接数量:" + footerLinks.size());

        for (int i = 0; i < Math.min(5, footerLinks.size()); i++) {
            WebElement link = footerLinks.get(i);
            System.out.println(link.getText());
            // 用JS打开新标签,兼容性更高
            js.executeScript("window.open(arguments[0].href, '_blank');", link);
            Thread.sleep(500);
        }

        // 测试amazon.in站点
//        driver.get("https://www.amazon.in/");
//        WebElement amazonFooter = driver.findElement(By.cssSelector("div.navFooterVerticalColumn.navAccessibility"));
//        js.executeScript("arguments[0].scrollIntoView(true);", amazonFooter);
//        Thread.sleep(1000);
//        List<WebElement> amazonFooterLinks = amazonFooter.findElements(By.xpath(".//div[1]/ul//a"));
//        System.out.println("amazon页脚第一个区块链接数量:" + amazonFooterLinks.size());
//
//        for (WebElement link : amazonFooterLinks) {
//            System.out.println(link.getText());
//            js.executeScript("window.open(arguments[0].href, '_blank');", link);
//            Thread.sleep(500);
//        }

        // 执行完后可自行加driver.quit()关闭
    }
}

关键优化点

  • 所有子元素定位的XPath都加了.前缀,严格限制搜索范围在页脚容器内,不会匹配到页面其他位置的元素
  • 改用JavascriptExecutor直接打开链接的href属性到新标签,跳过元素聚焦、事件拦截等问题,兼容性远高于sendKeys发送Ctrl+Enter的方案
  • 提前把所有页脚链接存到List中,避免循环中反复查找元素导致的过期问题
  • 滚动到页脚后增加了短等待,确保页脚内容完全渲染后再操作

内容的提问来源于stack exchange,提问作者Shilpa Malhotra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 06:45:03