如何使用Selenium WebDriver在网页上查找元素?

2024-05-06 11:32:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在YouTube上使用SeleniumWebDriver为FireFox自动完成一项任务。在

我在YouTube上创建了一个播放列表,我想获得该播放列表中所有视频的超链接。在

html如下所示:

<a href="/watch?v=StJLvbPIvTw&amp;list=PLt5xbw4ekDQssXxfaIfh_XbKe-iuOTZo_&amp;index=1" title="ADELE - Skyfall (Official video HD)" class="yt-uix-tile-link yt-uix-sessionlink" data-sessionlink="feature=plpp_video&amp;ei=RodgUazfOKWlhAHOioGoDA">
    <span class="title video-title" dir="ltr">ADELE - Skyfall (Official video HD)</span>
  </a>

我尝试使用find_by_partial_link_text查找元素,但失败了。在

我的最终动机是获取播放列表中所有视频的超链接,以便将其传递给下一个脚本单独访问它们。 任何帮助将不胜感激。在

注意:我在中找到了一个与SO 非常相似的答案,但是这里提供的答案是迭代一个WebElement对象,在我的例子中,它抛出了一个异常:object is not iterable。在

编辑:

^{pr2}$

Tags: 视频titleyoutubevideolink播放列表classamp
2条回答

您可以通过简单的字符串操作获得链接。在

将字符串加载到变量中,按空格分隔字符串,第二个元素将给您提供href+链接,删除href部分,您将获得链接。在

试试这个

html = '<a href="/watch?v=StJLvbPIvTw&amp;list=PLt5xbw4ekDQssXxfaIfh_XbKe-iuOTZo_&amp;index=1" title="ADELE - Skyfall (Official video HD)" class="yt-uix-tile-link yt-uix-sessionlink" data-sessionlink="feature=plpp_video&amp;ei=RodgUazfOKWlhAHOioGoDA"> <span class="title video-title" dir="ltr">ADELE - Skyfall (Official video HD)</span> </a>'

parts = html.split(" ")

link = parts[1][6:-1]

尝试通过以下方式获取链接: String hrefSpecs = driver.findelement(By.cssSelector("a.yt-uix-tile-link.yt-uix-sessionlink")).getAttribute("href")

通常你会

/watch?v=StJLvbPIvTw&amp;list=PLt5xbw4ekDQssXxfaIfh_XbKe-iuOTZo_&amp;index=1

所以你的子串如下:

String sublink = hrefSpecs.substring(0,20); // check the 20 i'm not sure

你会得到

^{pr2}$

既然你有了这个,你就可以写那样的东西了

String youtube = "www.youtube.com";
String link = youtube + sublink;

你最终得到:www.youtube.com/watch?v=StJLvbPIvTw

但是如果你有一个包含所有链接的页面,你将构建类似于:

List<String> listLink = driver.findElements(By.cssSelector("a.yt-uix-tile-link.yt-uix-sessionlink")).getAttribute("href")

你将用foreach和前面的子串等进行迭代,我让你测试并告诉我是否有问题。在

编辑:WebElement不可编辑,List<WebElement>或{}在您的例子中是iterable。我用Java写的,希望你能“翻译”它=)

相关问题 更多 >