#python #selenium #xpath #locators
Вопрос:
из приведенного ниже html я хочу получить divs между div1 и div два, мне нужна помощь в определении способа, которым я могу получить divs с помощью селена
lt;div class="div"gt;lt;/divgt; lt;divgt;lt;/divgt; lt;divgt;lt;/divgt; lt;divgt;lt;/divgt; lt;divgt;lt;/divgt; lt;div class="div2"gt;lt;/divgt;
это код, который используется
driver.find_element_by_xpath('.//div[@class="div1"]').find_elements_by_xpath('//following::div')
Ответ №1:
Если вы хотите, чтобы дивы находились между
div class div1
и
div class div2
Пожалуйста, используйте ниже XPath
.//div[@class='div1']//following-sibling::div[not(@class='div2')]
В вашем коде что-то вроде этого :
driver.find_element_by_xpath('.//div[@class="div1"]').find_elements_by_xpath(".//div[@class='div1']//following-sibling::div[not(@class='div2')]")
чтобы проверить это, я создал фиктивный HTML,
Как вы можете видеть, он выделяет 4 узла.
Поверьте, это помогает!
Ответ №2:
В вашем случае селектор css был бы лучшим решением:
const cssSelector = ".div ~ div:not(.div2 ~ *):not(.div2)"
В основном то, что он делает, это:
.div ~ // selects siblings div:not(.div2 ~ *):not(.div2) // selects all div tags expect ones that are after .div2 and .div2 itself
Вы можете попробовать это с помощью:
document.querySelectorAll(".div ~ div:not(.div2 ~ *):not(.div2)");
Комментарии:
1. Почему это лучше?
2. Если вы можете сделать выражение пути XPath короче, чем cssSelector, которое я предоставил (для вашего конкретного случая), я бы сказал, что решение XPath лучше.