使用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
相关产品推荐
相关产品推荐

