如何使用webdriver(python)从css(非内联)中按样式选择元素

Posted

技术标签:

【中文标题】如何使用webdriver(python)从css(非内联)中按样式选择元素【英文标题】:How do I select an element by its style from css (not inline) using webdriver (python) 【发布时间】:2014-08-07 07:03:03 【问题描述】:

我希望使用 python-webdriver 根据元素的背景突出显示颜色来选择元素。通常,这段html

<div class="line-highlight" style="background:#FD71B5;">

我会选择它执行以下操作:

.line-highlight[style*='background:#FD71B5']

但是,在这种情况下,我有不同的内联样式:

<div class="line-highlight" style=top:130px;height:28px;left:506px;width:434px;">

但是高亮颜色(相同)是在外部 CSS 中设置的,所以上面的选择器似乎不起作用。

如果样式不是内联的,webdriver 有什么方法可以按样式选择?

谢谢, 达伦

【问题讨论】:

不直接使用 CSS 选择器。您需要选择 .line-highlight 并询问其计算样式。 【参考方案1】:

因为您要查找的 css 不是 HTML 标记的一部分,所以您不能像通常那样选择元素。

而是尝试通过类名“.line-highlight”进行选择,然后遍历生成的元素对象,并为每个元素获取 css 背景属性值,方法是:

value_of_css_property("background") 

(或与此相关的任何 css 属性)。一旦元素与您正在寻找的背景相匹配,您就可以从循环中中断并找到您正在寻找的元素。

请注意,如果您使用的是 Java,请使用:

getCssValue(property-name)

【讨论】:

嗯,所以我应该能够做一些类似的事情来找到颜色并从那里开始工作:element = driver.find_element_by_css_selector(".line-highlight") element.value_of_css_property('color') 好的,谢谢! 对不起,我的意思是:element.value_of_css_property('background')【参考方案2】:

这个链接http://www.w3.org/2002/07/26-dom-article.html 对风格的看法。

访问与文档关联的样式 文档中的每个节点都与风格效果相关联,例如颜色、位置和 边界。这些风格效果并不总是文档的一部分,可能在 一个称为样式表的单独部分。

因此,由于 Selenium 仅与 DOM 一起工作,它无法根据需要定位元素。

【讨论】:

以上是关于如何使用webdriver(python)从css(非内联)中按样式选择元素的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Selenium Webdriver 和 Python 从这个非选择下拉菜单中选择这个元素

Selenium,webdriver - 找不到 - xpath / css_selector / ... python

如何从带有 python 2.7 和 Robot framework 2.9 的 Edge webdriver 开始

从python中的Selenium Webdriver实例获取文本[重复]

如何使用 selenium webdriver (python) 选择、复制和粘贴元素中的所有内容

Python中Webdriver库的使用