Могу ли я получить конкретный «dl», т. Е. По первому или второму индексу, из множества идентифицированных в моем приложении селектором CSS - PullRequest
0 голосов
/ 15 октября 2018

Я пытаюсь автоматизировать функциональность с помощью селена в моем браузере Application Chrome.Это страница, основанная на графике SVG и отображающая детали при наведении на нее курсора.И это можно идентифицировать с помощью селектора CSS, который возвращает более одного совпадающего элемента (т.е. 6-7 dl , у этих dls есть несколько дочерних тегов, а затем внутренне содержащих значения, которые мне нужно проверить - как прикреплено), теперьМне нужно выбирать их по одному и проверять их текст (который отображается при наведении курсора мыши).Я узнал в Google, как читать nth-child из dl , но не смог выбрать конкретный dl .Например, мой селектор: .d3-tip.n> dl, если я использую -.d3-tip.n> dl> dt: nth-child (odd): он дает мне все атрибуты dt .. т.е. 6 значенийно я недд значения только из fst dl.Аналогично. D3-tip.n> dl> dd: nth-child (even) возвращает 6 значений уважаемых dds. В действительности мое приложение имеет только один dl (для пользовательского интерфейса), но не знаю, почему оно отображает 6 в DOM...

Пожалуйста, обратитесь к приложению и 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 голосов
/ 15 октября 2018

Хорошо, поэтому я не уверен, какой из элементов вы хотите ...

Итак ... вот фрагмент, который должен помочь вам.

A) при зависании.

B) с циклическим прохождением элементов.

C) Бонус Подробнее о contains() функциональности XPath ...

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)

Iнадеюсь, что вы найдете это полезным!

0 голосов
/ 15 октября 2018

nth-child - найти nth-потомка любого непосредственного родительского элемента.В вашей HTML DOM dd является единственным дочерним элементом каждого элемента div.d3-tip.Повторяющийся дочерний элемент на самом деле является вашим div.d3tip для его непосредственного родительского элемента

Таким образом, ваш селектор должен быть написан, как показано ниже, чтобы получить первый набор dd,

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

enter image description here

Получение второго селектора также работает.Это наиболее важно при написании CSS-селектора.Второе число должно работать.:).enter image description here

...