如何使用python /硒通过CSS选择器查找元素

时间:2019-03-25 18:01:00

标签: python selenium beautifulsoup

我正在尝试获取位于以下位置的youtube频道的链接:

<a id="author-text" class="yt-simple-endpoint style-scope ytd-comment- 
renderer" href="/channel/UCUSy-h1fPG1L6X7KOe70asA"> <span class="style- 
scope ytd-comment-renderer">Jörgen Nilsson</span></a>

因此,在上面的示例中,我想选择“ / channel / UCUSy-h1fPG1L6X7KOe70asA”。到目前为止,我已经尝试了许多选项,但没有任何效果:

driver = webdriver.Chrome('C:/Users/me/Chrome Web Driver/chromedriver.exe')
api_url="https://www.youtube.com/watch?v=TQG7m1BFeRc"
driver.get(api_url)
time.sleep(2) 
div = driver.find_element_by_class_name("yt-simple-endpoint style-scope ytd-comment-renderer")

但是出现以下错误:     InvalidSelectorException:消息:无效的选择器:不允许使用复合类名称

我还尝试了其他方法:

div = driver.find_elements_by_xpath("yt-simple-endpoint style-scope ytd-comment-renderer")

div = driver.find_element_by_class_name('yt-simple-endpoint style-scope ytd-comment-renderer')

div=driver.find_element_by_css_selector('.yt-simple-endpoint style-scope ytd-comment-renderer').get_attribute('href')

但是没有运气..如果有人可以帮助您,将不胜感激。谢谢

2 个答案:

答案 0 :(得分:1)

您可以在python中使用BeautifulSoup来获取锚标签中具有特定类名(例如soup.find_all('a', attrs={'class':'yt-simple-endpoint'}))的链接,您可以在此处find_all using css阅读更多内容

答案 1 :(得分:1)

您的选择器无效:

  • driver.find_element_by_class_name("yt-simple-endpoint style-scope ytd-comment-renderer")

    您不能将多个类名传递给find_element_by_class_name方法。您可以尝试driver.find_element_by_class_name("ytd-comment-renderer")

  • driver.find_elements_by_xpath("yt-simple-endpoint style-scope ytd-comment-renderer")

    这不是正确的XPath语法。您可能是说driver.find_elements_by_xpath("//*[@class='yt-simple-endpoint style-scope ytd-comment-renderer']")

  • driver.find_element_by_css_selector('.yt-simple-endpoint style-scope ytd-comment-renderer')

    每个类名都应以点开头:driver.find_element_by_css_selector('.yt-simple-endpoint.style-scope.ytd-comment-renderer')

但是IMHO通过ID进行识别的最好方法是:

driver.find_element_by_id("author-text")