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

硒蟒find_element_by_class_name() 从 v 2.2 到 2.21 停止工作 -- 不能使用“复合类名”

马弘和
2023-03-14

我正在使用硒的蟒蛇库从火狐的html页面抓取数据。

我不得不从Selenium 2.0更新到2.21,因为服务器已经更新了Firefox。

在 v 2.21 中,对 find_element_by_class_name(“网格-单元-内部网格列名称”)的调用失败,出现以下情况:

selenium.common.exceptions.WebDriverException: Message: u'Compound class names not permitted'

我尝试访问的元素的类名是网格单元格内部网格列名

find_element_by_class_name()调用在 v 2.2 中起作用,因此逻辑是正确的,并且数据曾经被找到 OK。

所有的Selenium例子都给出了简单的例子,比如类名< code>foo等等,没有一个例子给出了我需要访问的名称类型。

为什么Selenium停止支持查找名为<code>网格单元内部网格列名称<code>的类,他们的解决方案是什么?

有人能帮我找到具有“复合”类名的元素吗?

共有3个答案

龙华翰
2023-03-14

我认为Selenium已经很长时间不支持复合类名了。

不用说,可以尝试通过XPath或CSS选择器,或者通过“网格单元内部”的类名,然后过滤以查看哪些元素具有“网格单元内网格列名称”的类。

锺离赤岩
2023-03-14

您需要使用格式为“.nameA.nameB.nameC”的CssSelector。您可以任意选择,只需添加“.”

或者,您可以匹配整个属性(您也可以使用xpath来做到这一点):"[class = ' exact class name here ']" XPath-//[@ class = ' exact class name here ']"

有一些方法可以以开始或结束或包含太多(在CSS和xpath中),这有助于动态生成类。

房唯
2023-03-14

WebDriver的问题是它仍然在发展。很多。我个人不知道有哪个版本在一个命令中支持多个类的搜索,所以它一定是一个相当旧的版本:)。

但是,通过CSS选择器搜索应该可以工作:

find_element_by_css_selector(".grid-cell-inner.grid-col-name");

我不推荐对这种特殊的事情使用XPath,因为下面这两个表达式是不同的东西:

//*[class='grid-cell-内部网格-col-name']

/*[class='grid-col-name网格单元内部']

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

  • 我有Visual Studio 2013,没有插件或任何花哨的东西。每当我编码时,每隔一段时间(可能每半小时一次),intellisense就会随机停止完成我的句子,或者在我按下Ctrl键时弹出。 我试过工具- 现在唯一能解决这个问题的就是关闭VS并重新打开它。但正如你所能想象的,这是非常令人沮丧的。

  • null GrantPermissionRule是否停止了为其他人所宣传的工作?

  • 我尝试使用xpath和classname来定位并单击按钮。然而,什么都不管用。 driver.find_element(By.XPATH,“//button[@class='sc-cqCuEk ffSPoi MuiButtonBase root sc dliRfk hLpdQI MuiAccordionSummary root Mui展开的MuiAccountionSummarygutters s

  • 现在,我需要合并一个使用log4j2的库。当我这样做时,我丢失了主应用程序的控制台日志记录(尽管日志消息仍然被写入以编程方式创建的文件追加器)。 我认为,由于文件追加器在原始应用程序中工作,我可以通过在主应用程序中以编程方式创建一个控制台追加器来解决我的问题。然而,我不知道这是对的还是胡说八道。 那么,我的问题是:关于使和log4j2互操作,我需要了解什么一般性的知识吗?如果原始应用程序编码不正确

  • 问题内容: 我想停止redis服务器,并且它一直在运行。我正在使用redis-2.6.7 检查它是否正在运行: 它显示“ … bind:地址已在使用中”,因此它已在运行。 我努力了 它只是挂起,没有任何反应。我中断检查,是的,它仍在运行。 我努力了 我得到“无法打开配置文件’停止’” 我试过了: 仍在运行。 我想要停止它的原因是,当我尝试通过Python设置或获取值时,它只是挂起了。所以我认为我会