当前位置: 首页 > 知识库问答 >
问题:

Python:消息:无效选择器:不允许复合类名

岑畅
2023-03-14

我正在测试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 .....”这一行你能帮我固定我这边吗?

共有1个答案

庾兴发
2023-03-14

当您试图使用类名来定位元素时,您不能使用多个类名,这将导致错误。你只需要提供一个。在你的代码中,“style-scope”和“ytd-grid-renderer”是两个不同的类,它们被附加到你的DOM标签上。如果您仍然想使用这两个类进行识别,您可以使用以下两种方法中的任何一种。

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']")
 类似资料:
  • 我尝试单击选择菜单并选择元素: 我的方式: 结果,我得到了这个异常: 组织.openqa.硒.无效选择器例外: 无效选择器: 不允许复合类名

  • 我正在尝试通过webWhatsapp从聊天中打印我的一条消息。 我可以通过控制台选项卡中的Javascript来做到这一点,我这样做了 问题是,我试图在python上做同样的事情,但它对我不起作用… 以下是我的尝试: 我得到的错误是:消息:无效选择器:不允许复合类名 我对javascript有点陌生,很抱歉理解有误,谢谢你的帮助!:)

  • 问题内容: 我正在尝试通过webWhatsapp从聊天中打印我的消息之一。 我可以通过“控制台”选项卡中的Javascript完成此操作 问题是我试图在python上做同样的事情,但对我不起作用。 这是我尝试过的: 我收到的错误是:消息:无效的选择器:不允许使用复合类名 我对javascript有点陌生,所以很抱歉造成误会,并感谢您的帮助!:) 问题答案: 根据 实施文档: 所以, 使用您将无法传

  • 我试图得到以下每个元素使用 inspect元素的输出如下。 但是它失败了,并抛出下面的错误。 另外,我如何遍历每个类?每个类都包含子部分,我想在进入下一个类之前进一步单独处理这些子部分。

  • 我得到以下错误: "不允许使用复合类名" 尝试访问Web元素时,元素的类名之间有空格。Web元素的页面源如下所示。 我试图通过CSS路径找到元素,如下所示。但是这个元素是不可搜索的。 这是在链接中给出的解决方法,但仍然没有成功。你的帮助将不胜感激。

  • 我试图获取具有特定类名的所有元素: 然而我得到的错误是: 我知道类名中不允许有空格,但是我该怎么办呢? 谢啦