为了账号安全,请及时绑定邮箱和手机立即绑定

硒化合物类名

硒化合物类名

慕勒3428872 2019-12-04 10:03:31
我有下面的代码,单击一个元素可以弹出一个屏幕并在其中复制文本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才能单击关闭按钮?
查看完整描述

3 回答

?
德玛西亚99

TA贡献1770条经验 获得超3个赞

Leon的评论提出了正确的信息,即不再支持复合类名称。相反,您可以尝试使用CSS选择器。就您而言,以下代码行应帮助您获取所需的元素:


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

它在class属性中找到具有所有三个类(action-btn,cancel和alert-display)的元素。请注意,这里的类顺序无关紧要,任何类都可以出现在class属性中的任何位置。只要元素具有所有三个类,就将其选中。如果您希望固定类的顺序,则可以使用以下xpath:


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


查看完整回答
反对 回复 2019-12-04
?
慕工程0101907

TA贡献1887条经验 获得超5个赞

这个问题我来晚了。但是,当您不熟悉Xpath时,也可以通过使用tag_name和get_attribute('class')将复合类作为String来处理,从而找到了解决方法。它需要更多的代码行,但是很简单,适合像我这样的初学者。


   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


查看完整回答
反对 回复 2019-12-04
?
白板的微信

TA贡献1883条经验 获得超3个赞

使用这种方式一会儿之后。我发现这可能不是一个好的解决方案。因为当TagName为'DIV'或'SPAN'时,每次尝试查找太重的元素时都必须遍历整个文档。此外,在页面加载时,您可能必须添加一些Try Except错误句柄以摆脱烦人的异常。了解并熟悉sagarwadhwa1的答案表明这将是一个很好的实践

查看完整回答
反对 回复 2019-12-04
  • 3 回答
  • 0 关注
  • 298 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信