我正在尝试在我的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
答案 0 :(得分:2)
nth-child用于查找任何直接父元素的nth-child。在您的HTML DOM中,dd是每个div.d3-tip元素的单个子元素。重复的孩子实际上是您直接父元素的div.d3tip
因此您的选择器必须按以下方式编写,以获取第一组dd,
div.d3-tip:nth-child(1)>dl>dd
获取第二个选择器也可以。这在编写CSS选择器时最重要。第二个n必须工作。 :)。
答案 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)
希望您对此有帮助!