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

使用Selenium提取LinkedIn Learning目录标题返回空字符串,求排查

问题:提取LinkedIn Learning目录标题返回空字符串

我尝试提取LinkedIn Learning课程页面的所有目录标题,编写了如下代码,但仅得到空字符串。

代码:

String url = "https://www.linkedin.com/learning/learning-azure-sql-querying-18952522?trk=learning-serp_learning-search-card_search-card&upsellOrderOrigin=default_guest_learning";
List<String> titles = new ArrayList<String>();
String tempTitle = "";

WebDriverManager.chromedriver().setup(); // Chrome
WebDriver driver = new ChromeDriver();
driver.manage().window().maximize();
driver.get(url);
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(15));

List<WebElement> elements = driver.findElements(By.className("table-of-contents__item-title"));
System.out.println(elements.size());

for (WebElement element : elements) {
    String title = element.getText().trim();
    titles.add(title);  
}

System.out.println(titles);

运行输出:

27
[, , , , , , , , , , , , , , , , , , , , , , , , , , ]

我想要获取页面中的标题,有人能指出我遗漏了什么吗?


解决方案

1. 处理登录限制

LinkedIn Learning的课程目录内容需要登录后才能正常加载文本。未登录状态下,元素虽然能被定位到(所以返回27个元素),但文本内容会被隐藏。你需要先实现登录流程:

// 在访问课程页面之前,先打开LinkedIn登录页完成登录
driver.get("https://www.linkedin.com/login");
driver.findElement(By.id("username")).sendKeys("你的账号");
driver.findElement(By.id("password")).sendKeys("你的密码");
driver.findElement(By.xpath("//button[@type='submit']")).click();
// 等待登录完成,再访问目标课程页面
driver.get(url);

2. 调整文本获取方式

部分动态渲染的元素,getText()可能无法正确获取内容,可以尝试直接读取DOM属性:

for (WebElement element : elements) {
    // 用textContent获取元素包含的所有文本内容
    String title = element.getAttribute("textContent").trim();
    titles.add(title);  
}

3. 优化等待策略

隐式等待可能不足以确保元素完全渲染,改用显式等待等待元素可见:

WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(20));
// 等待所有目录标题元素可见
List<WebElement> elements = wait.until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.className("table-of-contents__item-title")));

4. 检查元素定位准确性

打开浏览器开发者工具,确认table-of-contents__item-title元素本身是否包含文本。如果文本在子元素(比如<span>)中,需要调整定位器:

// 定位到包含文本的子元素
List<WebElement> elements = driver.findElements(By.cssSelector(".table-of-contents__item-title span"));

内容的提问来源于stack exchange,提问作者Kevin Grant

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 16:12:47