-1

我试图WebDriver在 YouTube 上使用 Selenium for 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 中找到了与此SO类似的答案,但此处提供的答案是迭代一个WebElement对象,在我的情况下该对象抛出异常,说对象不可迭代。

编辑:

def init():

    d = webdriver.Firefox()
    d.implicitly_wait(15)
    print "in init"
    return d

def youtube(d, uname, pwd):

    link_list = []
    d.get("http://www.youtube.com")
    print "in you"
    signin = d.find_element_by_partial_link_text("Sign in")
    signin.click()

    email = d.find_element_by_id("Email")
    passwo = d.find_element_by_id("Passwd")
    submit = d.find_element_by_id("signIn")

    email.send_keys(uname)
    passwo.send_keys(pwd)
    submit.click()

    list = d.find_element_by_partial_link_text("Playlists")
    list.click()

    play = d.find_element_by_partial_link_text("Fav songs")
    play.click()
    print play

    link_list = d.find_element_by_xpath('//*[@id="playlist-pane-container"]/div[1]')
    print "done"
    print link_list # prints None here
    hr = link_list.get_attribute("css=a@href")
    print hr
4

2 回答 2

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

你会得到

/watch?v=StJLvbPIvTw

既然你得到了这个,你就可以写这样的东西

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>或者[]在您的情况下是可迭代的。我用Java写的,我希望你能“翻译”它=)

于 2013-04-08T07:36:57.807 回答
-1

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

将字符串加载到变量中,用空格分割字符串,第二个元素将为您提供 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]

于 2013-04-07T03:19:16.420 回答