Я придумал оригинальный способ, может кому поможет - сначала загружаем сайт с ipv4, вводим почту-логин-пароль, решаем капчу, затем не закрывая сайт подключаемся к ipv6 и нажимаем кнопку "Зарегистрироваться", и сайт засчитывает регистрацию именно с ipv6
Первый и последний элемент с помощью XPATH [Решено]
-
Привет ребята.
Вопрос вот в чём:
На странице есть несколько элементов со свойством aria-expanded="true". Все они находятся внутри контейнера с id="SettingsPage_Content". Мне нужно взять ТОЛЬКО ПЕРВЫЙ из найденных элементов
Делаю селектор XPATH
>XPATH> .//*[@id="SettingsPage_Content"]//*[@aria-expanded="true"][1]Не работает (выбирает все элементы с aria-expanded="true" вместо только первого), хотя должен, поскольку синтаксис в соответствии со справочником по XPATH. Если отбросить окончание [1], то разницы никакой.
Да, можно решить проблему с помощью >AT>, вот так:
>XPATH> .//*[@id="SettingsPage_Content"]//*[@aria-expanded="true"] >AT>0Однако как в таком случае выбрать последний элемент из этого списка, ведь вот так:
>XPATH> .//*[@id="SettingsPage_Content"]//*[@aria-expanded="true"][last()]Тоже не работает?
-
@dobry-op said in Первый и последний элемент с помощью XPATH:
Привет ребята.
Вопрос вот в чём:
На странице есть несколько элементов со свойством aria-expanded="true". Все они находятся внутри контейнера с id="SettingsPage_Content". Мне нужно взять ТОЛЬКО ПЕРВЫЙ из найденных элементов
Делаю селектор XPATH
>XPATH> .//*[@id="SettingsPage_Content"]//*[@aria-expanded="true"][1]Не работает (выбирает все элементы с aria-expanded="true" вместо только первого), хотя должен, поскольку синтаксис в соответствии со справочником по XPATH. Если отбросить окончание [1], то разницы никакой.
Да, можно решить проблему с помощью >AT>, вот так:
>XPATH> .//*[@id="SettingsPage_Content"]//*[@aria-expanded="true"] >AT>0Однако как в таком случае выбрать последний элемент из этого списка, ведь вот так:
>XPATH> .//*[@id="SettingsPage_Content"]//*[@aria-expanded="true"][last()]Тоже не работает?
скорее всего неправильно само выражение, так как last() работает корректно в BAS. Приложите файлом html код страницы к которой применяете xpath
-
@Fox
это FB, там реакт, так что html не получится.
Для примера можешь зайти на страницу настроек уведомленийhttps://www.facebook.com/settings?tab=notifications
и раскрыть любой раздел настроек
Моими примерами будет находить все три элемента, а мне нужен первый и последний. Первый вытаскивается с помощью >AT>0. Последний не понимаю как вытащить.

-
скорее всего неправильно само выражение, так как last() работает корректно в BAS. Приложите файлом html код страницы к которой применяете xpath
Короче опытным путём в чате подсказали что порядковый предикат должен стоять ПЕРЕД предикатом-фильтром по свойствам.
Если нужен первый элемент:>XPATH> .//*[@id="SettingsPage_Content"]//*[1]/*[@aria-expanded="true"]или если нужен последний элемент:
>XPATH> .//*[@id="SettingsPage_Content"]//*[last()]/*[@aria-expanded="true"] -
короче полностью разобрался в этом вопросе
всё что выше - не правильное решение. Если кто желает обмазаться пониманием того как на самом деле работает, предикат last() и [0] рекомендую поиграться вот тут например: http://xpather.com/код для примера:
<div> <input> <input> <div> <input> <div> <input> <input> <div> <input> <input> <input> </div> <input> </div> <input> <input> </div> </div>Правильным решением моего вопроса оказалось вот такое решение (обратите внимание на круглые скобки):
(//div//input)[last()]То есть мы сначала выбираем все инпуты на странице, а потом ко всей выборке применяем предикат last()
Разница между
//div//input[last()]в том, что крайний пример выберет все последние инпуты во всех последних контейнерах. То есть их будет несколько. В то время как круглые скобки указывают сначала сделать выборку по всем инпутам, на странице, а потом уже среди них взять самый последний.
Мало ли кому пригодится мой опыт.