我尝试在YouTube上使用Selenium WebDriver
为FireFox自动执行任务。
我在YouTube上创建了一个播放列表,我希望获得该播放列表中所有视频的超链接。
html
看起来像这样:
<a href="/watch?v=StJLvbPIvTw&list=PLt5xbw4ekDQssXxfaIfh_XbKe-iuOTZo_&index=1" title="ADELE - Skyfall (Official video HD)" class="yt-uix-tile-link yt-uix-sessionlink" data-sessionlink="feature=plpp_video&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
答案 0 :(得分:1)
尝试获取链接:
String hrefSpecs = driver.findelement(By.cssSelector("a.yt-uix-tile-link.yt-uix-sessionlink")).getAttribute("href")
通常你会得到
/watch?v=StJLvbPIvTw&list=PLt5xbw4ekDQssXxfaIfh_XbKe-iuOTZo_&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写的,希望你能“翻译”它=)
答案 1 :(得分:-1)
你可以通过简单的字符串操作获得链接。
将字符串加载到变量中,用空格分割字符串,第二个元素将为您提供href +链接,删除href部分,您将获得链接。
试试这个
html = '<a href="/watch?v=StJLvbPIvTw&list=PLt5xbw4ekDQssXxfaIfh_XbKe-iuOTZo_&index=1" title="ADELE - Skyfall (Official video HD)" class="yt-uix-tile-link yt-uix-sessionlink" data-sessionlink="feature=plpp_video&ei=RodgUazfOKWlhAHOioGoDA">
<span class="title video-title" dir="ltr">ADELE - Skyfall (Official video HD)</span>
</a>'
parts = html.split(" ")
link = parts[1][6:-1]