当元素包含多个类名时如何在硒中复制标签?
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 后面有多余的空白区域,有人可以帮我解决这个问题吗? 手动添加这些空格或将它们放在同一行不会做任何事情。
【问题讨论】:
仅供参考,它是 scrape 和 scraping 不是报废或报废。报废和报废,意味着像垃圾一样扔掉,或者战斗。 【参考方案1】:正如答案中提到的@HedgeHog,您将无法在其中传递多个类名
driver.find_element(By.CLASS_NAME, "classA classB classC classD")
因为它可能会引发invalid selector。
此外,当您发现多个类名 pv-profile-section__see-more-inline
、pv-profile-section__text-truncate-toggle
、artdeco-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")
【讨论】:
以上是关于当元素包含多个类名时如何在硒中复制标签?的主要内容,如果未能解决你的问题,请参考以下文章