我使用Selenium
登录我的Google
帐户并访问YouTube
。
现在,在视频管理器上,我想获取所有视频ID。我尝试复制CSSSelector
或XPath
developer tools
Chrome
给我的List<WebElement> allVideoUrls = driver.findElements(By.cssSelector("my-selector-which-gives-all-videos-on-page"));
,但每个都包含视频ID,这使得它们无法像这样使用:
public void getVideoInformation()
{
// Visit video manager
driver.get("https://www.youtube.com/my_videos?o=U");
// Wait until video list has loaded
new WebDriverWait(driver, 10).until(ExpectedConditions
.visibilityOfElementLocated(By
.cssSelector("#vm-playlist-video-list-ol")));
// Return all links on page
List<WebElement> allLinks = driver.findElements(By.tagName("a"));
HashSet<String> videoLinks = new HashSet<>();
for (int linksIndex = 0; linksIndex < allLinks.size(); linksIndex++)
{
String link = driver.findElements(By.tagName("a")).get(linksIndex)
.getAttribute("href");
try
{
if (link.contains("edit"))
{
System.out.println(link);
// No duplicates
videoLinks.add(link);
}
} catch (Exception error)
{
error.printStackTrace();
}
}
// ...
}
请注意,我必须登录才能看到&#34;&#34;不公开或私人视频也是如此。
到目前为止,我的执行情况很糟糕,有时因某些原因无法正常工作。我首先获取页面上的所有链接,只返回用于编辑视频的链接。为了避免StaleElementReferenceException
我在循环内再次检索所有链接。
{{1}}
我很好,因为我需要加载所有其他页面以获取所有视频,但请帮助我找到一种有效/可靠的方式来获取视频ID。