当元素包含多个类名时如何在硒中复制标签?

Posted

技术标签:

【中文标题】当元素包含多个类名时如何在硒中复制标签?【英文标题】:How to copy tags in selenium when element contains multiple classnames? 【发布时间】:2022-01-17 12:20:00 【问题描述】:

从“查看更多”标签下隐藏大量文本的网站抓取数据。

通过selenium 点击所有此类按钮,然后使用beautifulsoup 抓取。但是,一些按钮的 html 标记中有额外的空格。将它们复制并粘贴到 browser.find_element_by_class_name('') 总是会产生错误。

 class="pv-profile-section__see-more-inline pv-profile-section__text-truncate-toggle
        artdeco-button artdeco-button--tertiary artdeco-button--muted"

请注意,artdeco 后面有多余的空白区域,有人可以帮我解决这个问题吗? 手动添加这些空格或将它们放在同一行不会做任何事情。

【问题讨论】:

仅供参考,它是 scrapescraping 不是报废或报废。报废和报废,意味着像垃圾一样扔掉,或者战斗。 【参考方案1】:

正如答案中提到的@HedgeHog,您将无法在其中传递多个类名

driver.find_element(By.CLASS_NAME, "classA classB classC classD")

因为它可能会引发invalid selector


此外,当您发现多个类名 pv-profile-section__see-more-inlinepv-profile-section__text-truncate-toggleartdeco-button--tertiary 等带有额外空格时,理想的方法是考虑一个唯一的类名,例如pv-profile-section__see-more-inline 对给定元素的功能来说是独一无二的,即 see more 并且您可以使用关注Locator Strategies:

使用class_name

browser.find_element(By.CLASS_NAME, "classname")

使用css_selector:

browser.find_element(By.CSS_SELECTOR, "input.pv-profile-section__see-more-inline")

使用xpath

browser.find_element(By.XPATH, "input[@class='pv-profile-section__see-more-inline']")

【讨论】:

【参考方案2】:

注意您将无法通过 find_element_by_class_name() 传递多个类名作为参数,因为它只接受一个类名 要通过多个类名查找元素,请尝试使用css-selectors:

browser.find_element_by_css_selector(".firstClassName.secondClassName")

【讨论】:

以上是关于当元素包含多个类名时如何在硒中复制标签?的主要内容,如果未能解决你的问题,请参考以下文章

检查元素在硒中是不是可点击

检测声音是不是在硒中播放

在硒中按电话键盘输入键

如何使用扩展和硒打开一个新的标签页?

当 <div> 标签的类名看起来很奇怪时,如何更改它? [复制]

如何“悬停”硒中的按钮? [复制]