硒化合物类别名称未被允许

2024-04-19 09:38:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有下面的代码,单击一个元素弹出一个屏幕并复制其中的文本

el1 = driver.find_element_by_id("keyDev-A")
el1.click()
el2 = driver.find_element_by_class_name("content")
print(el2.text)

但是,当我试图让selenium单击弹出窗口中的按钮时

el3 = driver.find_element(By.CLASS_NAME, "action-btn cancel alert-display")
el3.click()

它产生一条错误消息:invalid selector: Compound class names not permitted

这是我试图让selenium点击的HTML。按Close键。

<div class="nav">
    <span class="action-btn confirm prompt-display">Confirm</span>
    <span class="action-btn cancel prompt-display">Cancel</span>
    <span class="action-btn cancel alert-display">Close</span>
</div>

我应该如何编写el3才能单击“关闭”按钮?


Tags: bydriverseleniumdisplayactionelementfindcancel
2条回答

Leon's comment得到了不再支持复合类名的正确信息。你可以试着使用css选择器。在您的例子中,以下代码行应该可以帮助您获得所需的元素:

el3 = driver.find_element_by_css_selector(".action-btn.cancel.alert-display")

它在类属性中查找具有所有三个类(action btn、cancel和alert display)的元素。请注意,类的顺序在这里并不重要,任何类都可能出现在类属性中的任何位置。只要元素有三个类,它就会被选中。 如果要固定类的顺序,可以使用以下xpath:

el3 = driver.find_element_by_xpath("//*[@class='action-btn cancel alert-display']") 

这个问题我来晚了。但我也找到了一个解决办法,当您不熟悉Xpath时,可以将复合类作为字符串处理,使用tag_name和get_attribute('class')。它需要更多的代码行,但它是直截了当的,适合像我这样的初学者。

   elements = driver.find_elements_by_tag_name('Tag Name Here')
        for element in elments:
            className = watchingTable.get_attribute('class')
            print(className)
                if className == 'Your Needed Classname':
                    #Do your things

相关问题 更多 >