Этот Xpath: '/html/body/section/section/header/div[2]/div/button'
подобен тому, когда вы получаете карту с инструкциями, такими как step forward until you see a car then turn left 30° then step forward until you see a tree then hop twice then go to the second house to your right
. Не безопасно использовать, избегайте таких путей. Если макет страницы изменится, ваш путь может стать недействительным.
Попробуйте сделать следующее:
button = driver.find_element_by_xpath('//*[@class="reply-button js-only"]')
button.click()
При нажатии кнопки открывается всплывающее окно «Показать номер телефона» (которое может быть найдено по адресу driver.find_element_by_xpath('//*[@class="show-phone"]')
).
Объяснение:
Если вам нужен правильный Xpath, проверьте, с чем вы хотите взаимодействовать. Кнопка, которую вы хотите нажать:
<button role="button" class="reply-button js-only" data-href="/__SERVICE_ID__/chs/ctd/7108660907">
reply
</button>
Вы можете видеть, что у нее нет тега "id", но это кнопка с указанным c классом. Вы можете сразу скопировать часть «class» -> class="reply-button js-only"
Теперь вы можете проверить, достаточно ли она уникальна:
driver.find_elements_by_xpath('//*[@class="reply-button js-only"]')
Если «find elements» возвращает один результат, как правило, вы должны быть в порядке. Вы можете видеть, что все, что я сделал, это вставил класс в это: driver.find_elements_by_xpath('//*[@
и это ]')
.
Если вам нужна большая точность, вы можете указать, что это кнопка:
driver.find_element_by_xpath('//button[@class="reply-button js-only"]')
Или это прямой потомок элемента с классом: class="actions-combo"
, поэтому более безопасный путь будет:
driver.find_element_by_xpath('//*[@class="actions-combo"]/button[@class="reply-button js-only"]')
Этот шаблон работает для всех атрибутов webelement, а не только для классов. Вы можете использовать role="button"
тоже для дополнительной фильтрации. Посмотрите на Xpath, это довольно аккуратный материал.