【问题标题】:Python: Message: invalid selector: Compound class names not permittedPython:消息:无效选择器:不允许复合类名
【发布时间】:2020-09-11 17:21:34
【问题描述】:

我很想测试 Python Selenium,我有这个代码:

from selenium import webdriver
url = 'https://www.youtube.com/channel/UC8tgRQ7DOzAbn9L7zDL8mLg/videos'
driver = webdriver.Chrome()

driver.get(url)

videos = driver.find_elements_by_class_name('style-scope ytd-grid-renderer')

for video in videos:
    title = video.find_elements_by_xpath('.//*[@id="video-title"]').text
    views = video.find_elements_by_xpath('.//*[@id="metadata-line"]/span[1]').text
    when = video.find_elements_by_xpath('.//*[@id="metadata-line"]/span[2]').text
    print(title,views,when)

在运行过程中出现此错误:

    selenium.common.exceptions.InvalidSelectorException: Message: invalid selector: Compound class names not permitted
  (Session info: chrome=85.0.4183.83)
  (Driver info: chromedriver=2.35.528161 (5b82f2d2aae0ca24b877009200ced9065a772e73),platform=Windows NT 10.0.18363 x86_64)

它一直运行到“videos = driver.....”这一行 你能帮我解决我的问题吗?

【问题讨论】:

    标签: python selenium-webdriver web-scraping


    【解决方案1】:

    当您尝试使用类名定位元素时,您不能使用多个类名,您会收到错误消息。您只需要提供一个。 在您的代码中,“style-scope”和“ytd-grid-renderer”是附加到 DOM 标签的 2 个不同的类。如果您仍然想同​​时使用这两个类进行识别,您可以使用以下两种方式之一。

    css 选择器:

    videos = driver.find_elements_by_css_selector('.style-scope.ytd-grid-renderer')
    

    xpath:

     videos = driver.find_elements_by_xpath(".//*[@class='style-scope ytd-grid-renderer']")
    

    【讨论】:

    • 您确定'.style-scope,.ytd-grid-renderer' 是有效的语法吗?你的意思是'.style-scope.ytd-grid-renderer'
    • 改了之后还是报错:title = video.find_elements_by_xpath('.//*[@id="video-title"]').text AttributeError: 'list' object has no属性“文本”
    • 这应该可以。我没有看到您的 xpath 有任何问题。您可以尝试使用 find_element_by_id('video-title') 代替 xpath 或使用 getAttribute('innerHTML') 代替 text 并检查。
    • @JaSON 感谢您的更正。逗号不应该在那里。我有正确的代码
    猜你喜欢
    • 1970-01-01
    • 2019-12-08
    • 2019-04-30
    • 1970-01-01
    • 2015-04-15
    • 2017-04-22
    • 2020-11-04
    • 2015-11-09
    • 2011-07-26
    相关资源
    最近更新 更多