【问题标题】:how to find element by css selector using python / selenium如何使用python / selenium通过css选择器查​​找元素
【发布时间】:2023-03-16 13:49:01
【问题描述】:

我正在尝试获取以下 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')

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

【问题讨论】:

  • 你试过find_element_by_id('#author-text')吗?

标签: python selenium beautifulsoup


【解决方案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')

但是恕我直言,ID 识别的最佳方式:

driver.find_element_by_id("author-text")

【讨论】:

  • 嗨,谢谢你的帮助,它几乎可以工作,它会提取用户名,例如,在下面: Jörgen Nilsson 它选择了 Jörgen Nilsson 但我想捕获 /channel/UCUSy-h1fPG1L6X7KOe70asA ...?
  • 上面忘了规定,driver.find_elements_by_xpath("//*[@class='yt-simple-endpoint style-scope ytd-comment-renderer']") 是一个几乎可以工作的
  • @tezzaaa,加.get_attribute('href')提取链接
【解决方案2】:

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

【讨论】:

  • 谢谢,我会尽快尝试,我目前正在旅行
猜你喜欢
  • 1970-01-01
  • 2021-11-21
  • 2018-10-22
  • 2021-11-17
  • 1970-01-01
  • 2019-04-30
  • 1970-01-01
  • 2020-05-02
  • 1970-01-01
相关资源
最近更新 更多