2016-12-27 6 views
0

У меня проблема с поиском элемента с XPath в Selenium (Python). Я хочу сделать два действия: во-первых, чтобы получить доступ к дочернему элементу родителя (который является дочерним югу от дочернего элемента), а затем получить доступ к следующему тегу sibling, чтобы сделать то же самое.Доступ к детям с XPATH

<div class="A"> 

    <div class="non-desired"></div> 

    //First Access to B 
    <div class="B"> 
    //In order to treat C 
    <div class="C"></div> 
    </div> 

    // And then doing the same for all next B elements 
    <div class="B"></div> 

    ... 

    <div class="B"></div> 

</div> 

Я хочу, чтобы получить доступ к первому классу B (который является вторым ребенком родительского DIV), чтобы получить доступ к классу C. И затем, после того, как это будет сделано, вы получите доступ ко второму классу B и выполните то же самое ... третий класс B и сделайте то же самое ... и так далее.

Я знаю, как делать базовые XPATH, но я потерян. Что я сделал это:

//div[@class='A']/following-sibling::div 
+0

B являются детьми A, а не братьями и сестрами. – choroba

+0

Да, но это также касается братьев и сестер с следующим тегом ребенка. – Mystyroi

ответ

0

Чтобы получить доступ к B вы можете использовать этот XPath:

driver.find_element_by_xpath('/html/body/div/div[2]') 

, который даст вам 2-й элемент вашего B. Если вы хотите, чтобы следующий, вы просто изменить индекс:

/html/body/div/div[3] 

чтобы получить доступ к потомку B, необходимо добавить еще один DIV в XPath:

driver.find_element_by_xpath('/html/body/div/div[2]/div') 

И для доступа к родителю любого элемента, который вы используете:

driver.find_element_by_xpath('/html/body/div/div[2]/div')._parent 

Надежда это было полезно.

+0

Спасибо за тезисы – Mystyroi

0

Вы можете найти все элементы, которые имеют класс B по

allClassB = driver.find_elements_by_xpath("//div[@class='A']/div[@class='B']") 

Теперь у вас есть список всех элементов класса B, вы можете использовать for цикл, чтобы пройти через каждый элемент

Если цель состоит в том, чтобы найти все элементы с классом C, вам просто нужно сделать так:

allClassC = driver.find_elements_by_xpath("//div[@class='A']/div[@class='B']/div[@class='C']") 
+0

Спасибо за ваш ответ, поэтому я «поймал» все элементы с классом C в var, поэтому, если я хочу, чтобы для каждого элемента C кликнул, я просто должен это сделать? 'while i Mystyroi

+0

Это зависит, вы можете попробовать посмотреть, работает ли он. Однако во всех случаях это будет работать. Иногда, когда страница обновляется после первого щелчка, второй клик может вызывать исключение. В случае исключения 'StaleElementReferenceException' вам нужно будет снова найти элементы (в цикле for) –

+0

Я нахожусь на правильном пути для достижения того, чего хочу. Но у меня проблема. В моем цикле и в моем xpath, если я напишу div [j] (с j объявленным и увеличенным), значение j не будет заменено его значением, а Python сохранит имя переменной вместо замены. Обычно, если мы перечислим [j], он заменит J, но это не относится к выражению XPATH. Я устал div ['j'], но j сохраняет одинаковое значение каждый раз. – Mystyroi

Смежные вопросы