Я пытаюсь выбрать div
который выделен синей полосой:
Это второй div
на странице, который содержит текст "All"
, поэтому моя попытка следующая:
all_button = driver.find_element_by_xpath("//div[contains(., 'All')][2]")
По какой-то причине, когда я запускаю свою программу, это выбирает div
, выделенный желтым цветом. Я попытался использовать string()
и text()
вместо периода в секции contains()
, но он дает тот же результат. Есть идеи?
замещать
//div[contains(., 'All')][2]
с
(//div[contains(., 'All')])[2]
чтобы выбрать второй такой div
а не ограничивать такие элементы div
во второй дочерней позиции.
Вы можете еще более затянуть предикат, чтобы использовать строковое равенство, а не сдерживание подстроки (чтобы избежать совпадения <div>All good men</div>
, например), если ваши данные действительно показаны:
(//div[.='All'])[2]
Вы можете попробовать быть более строгим с вашим выбором, добавив условие:
all_buttons = driver.find_element_by_xpath(
"//class[contains(@class, 'filter-option selected') and contains(text(), 'All')]")
Теперь для отладки проверьте размер возвращаемого списка:
print(len(all_buttons))
Если размер списка кнопок "Все", полученный в соответствии с DOM, вы должны делать все.
(//div[.='All'])[2]
, работал отлично. Как ни странно,(//div[contains(., 'All')])[2]
выбрал "Бронза" вместо "Все". HTML-код, содержащий «Bronze», по структуре идентичен коду, показанному выше для «Platinum».div
который содержит «Bronze» (в пределахspan
), расположен непосредственно нижеdiv
который содержит «All».div
предка также будет содержатьAll
in//div[contains(., 'All')]
.