我可以在我的应用中由CSS选择器识别出的特定“ dl”(即第一索引还是第二索引)

时间:2018-10-15 08:04:23

标签: selenium selenium-webdriver css-selectors

我正在尝试在我的Application Chrome浏览器中使用硒自动化功能。这是一个基于SVG图形的页面,当鼠标悬停在页面上时会显示详细信息。这可以通过CSS选择器来识别,该选择器返回多个匹配元素(即6-7 dl ,这些dls子标签很少,然后内部包含我需要验证的值-如所附),现在,我需要一次一个地选择它们并验证它们的文本(在鼠标悬停时显示)。 我在Google上了解了如何从 dl 读取第n个孩子,但一开始却没有办法选择特定的 dl 。 例如- 我的选择器是:.d3-tip.n> dl 如果我使用-.d3-tip.n> dl> dt:nth-​​child(odd):它为我提供了dt ..的所有属性,即6个值,但我仅从fst dl获得了nedd值。 类似地。d3-tip.n> dl> dd:nth-​​child(even)返回6个被尊重的dds值。 在“实际”中,我的应用程序(在UI上)只有一个dl,但不知道为什么它在DOM中显示6 ...

请Plz引用附件和HTML 以清楚地了解DOM

<div class="d3-tip n" style="position: absolute; top: 44.5px; opacity: 0; pointer-events: none; box-sizing: border-box; left: 515px;">
<dl style="width:335px">
<dt>Space Name:</dt>
<dd>Space</dd>
<dt>Property Type:</dt>
<dd>Office</dd>
<dt>Quoted Area:</dt>
<dd>444 sf</dd>
<dt>Space Usage:</dt>
<dd>Business Park,Commercial School</dd>
<dt>Space Status:</dt>
<dd>For Lease</dd>
<dt>Possession Status:</dt>
<dd>Vacant</dd>
</dl>
<span class="d3-tip__pin"/>
</div>
<div class="d3-tip n" style="position: absolute; top: 44.5px; opacity: 0; pointer-events: none; box-sizing: border-box; left: 515px;">
<dl style="width:335px">
<dt>Space Name:</dt>
<dd>Space</dd>
<dt>Property Type:</dt>
<dd>Office</dd>
<dt>Quoted Area:</dt>
<dd>444 sf</dd>
<dt>Space Usage:</dt>
<dd>Business Park,Commercial School</dd>
<dt>Space Status:</dt>
<dd>For Lease</dd>
<dt>Possession Status:</dt>
<dd>Vacant</dd>
</dl>
<span class="d3-tip__pin"/>
</div>
<--! and so on up to 6 blocks of dl
enter image description here

enter image description here

2 个答案:

答案 0 :(得分:2)

nth-child用于查找任何直接父元素的nth-child。在您的HTML DOM中,dd是每个div.d3-tip元素的单个子元素。重复的孩子实际上是您直接父元素的div.d3tip

因此您的选择器必须按以下方式编写,以获取第一组dd,

div.d3-tip:nth-child(1)>dl>dd

enter image description here

获取第二个选择器也可以。这在编写CSS选择器时最重要。第二个n必须工作。 :)。 enter image description here

答案 1 :(得分:0)

好,所以我不确定您想要哪个元素...

所以...这是一个片段,应该可以为您提供帮助。

A)悬停。

B)遍历元素。

C)奖金了解XPath的contains()功能...

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.action_chains import ActionChains


url = "http://your_url"
path_to_chromedriver = "C:\path_to_chromedriver"
chrome_options = Options()
#chrome_options.add_argument("--headless")
chrome_options.add_argument("--start-maximized")
browser = webdriver.Chrome(executable_path=path_to_chromedriver,
                       chrome_options=chrome_options)
browser.get(url)
# list_of_dt_elements_to_hover = browser.find_elements_by_xpath("//div[contains(@class,'d3-tip')]//dl/dt")
list_of_dt_elements_to_hover = browser.find_elements_by_xpath("//div[class='d3-tip n']//dl/dt")
list_of_dd_elements_to_hover = browser.find_elements_by_xpath("//div[contains(@class,'d3-tip')]//dl/dd")
hover = ActionChains(browser).move_to_element(list_of_dt_elements_to_hover[0])
hover.perform()
for dd_ele in list_of_dt_elements_to_hover:
    hover = ActionChains(browser).move_to_element(dd_ele)
    hover.perform()
    print(dd_ele.text)
for dd_ele in list_of_dd_elements_to_hover:
    hover = ActionChains(browser).move_to_element(dd_ele)
    hover.perform()
    print(dd_ele.text)

希望您对此有帮助!