Как сделать клик в xPath только по видимой кнопке?

  • Автор темы Автор темы Nekro
  • Дата начала Дата начала
  • Теги Теги
    xpath

Nekro

Client
Регистрация
01.08.2020
Сообщения
246
Реакции
26
Баллы
28
Здравствуйте.

Работаю с Facebook и там при репосте записи есть кнопка опубликовать, во всплывающем окне. Как сделать чтобы xPath кликал только по видимому элементу, а не в порядке очереди DOM? (если это вообще возможно)

Код:
Развернуть Свернуть Копировать
//button[text()="Опубликовать"]

Вопрос общий. С Facebook много похожих ситуаций где зацепиться не за что. Все классы и ID динамические + совершенно другие ветки.
 
C#:
Развернуть Свернуть Копировать
var xpath = "//button[text()='Опубликовать']";

HtmlElement he = instance.ActiveTab.FindElementByXPath(xpath, 0);
if (he.IsVoid) throw new Exception("не найдено и т.д."); // проверка элемента
he.Click();

instance.ActiveTab.FindElementByXPath(xpath, 0).Click();
 
  • Спасибо
Реакции: Roman48 и one
Я умудрился экшеном реализовать. Тфу-тфу, пока работает. )))
62394
 
C#:
Развернуть Свернуть Копировать
var xpath = "//button[text()='Опубликовать']";

HtmlElement he = instance.ActiveTab.FindElementByXPath(xpath, 0);
if (he.IsVoid) throw new Exception("не найдено и т.д."); // проверка элемента
he.Click();

instance.ActiveTab.FindElementByXPath(xpath, 0).Click();
Что то не так.
Компиляция кода Ошибка в действии "CS0104" "'HtmlElement' is an ambiguous reference between 'ZennoLab.CommandCenter.HtmlElement' and 'System.Windows.Forms.HtmlElement'". [Строка: 2; Cтолбец: 1]
 
Эта ошибка выскакивает уже при запуске шаблона т.е. страница ФБ еще не загружена.
 
C#:
Развернуть Свернуть Копировать
var xpath = "//button[text()='Опубликовать']";

HtmlElement he = instance.ActiveTab.FindElementByXPath(xpath, 0);
if (he.IsVoid) throw new Exception("не найдено и т.д."); // проверка элемента
he.Click();

instance.ActiveTab.FindElementByXPath(xpath, 0).Click();
Попробовал. У меня почему то первый пост 2 раза репостнулся. Хотя я выбирал специально другой. Если бы там было одно значение - то я бы без проблем сделал. А так у меня минимум 4 значения в DOM (одинаковые). Поэтому и вопрос в клике по видимому элементу
 
значит слишком простой xpath . надо найти уникальные элементы, цепляться за них и уже через методы родители/братья идти до нужной кнопки
 
значит слишком простой xpath . надо найти уникальные элементы, цепляться за них и уже через методы родители/братья идти до нужной кнопки
Это понятно. Я решил узнать есть ли решение кликнуть по видимому элементу через xpath, чтобы не писать километр кода. Изучив немного xpath я понял, что теоретически можно совместить любые элементы, которые содержаться на странице. Наверное придётся так и делать если не будет подходящего ответа.
 
В конце добавь [0]
кинь ссылку, сделаю
 
там не кнопка, там див
Screen Shot 2020-08-27 at 16.47.44.png
 
там не кнопка, там див
В моём случае кнопка. Десктопное разрешение и классический дизайн Facebook. Я делаю репост со страницы по типу этой: https://www.facebook.com/cutecatpage/


В конце добавь [0]
кинь ссылку, сделаю
Не понял куда добавить [0] и зачем? Это же выбирает первый элемент насколько я знаю.

На что кинуть ссылку? На проект?
 
репост
Screen Shot 2020-08-27 at 17.11.21.png
 
Короче поставь расширение и тести
 
обнови, добавил репост.
Так у меня такой же код в первом сообщении этой темы :-) Кликнуть по этой кнопке - не проблема. Проблема кликнуть по нужной кнопке. Ведь элемента 4, а кликать будет всегда по первому варианту. Даже если я буду репостить второй пост.


Короче поставь расширение и тести
Я использую ChroPath.
 
Так у меня такой же код в первом сообщении этой темы :-) Кликнуть по этой кнопке - не проблема. Проблема кликнуть по нужной кнопке. Ведь элемента 4, а кликать будет всегда по первому варианту. Даже если я буду репостить второй пост.
Я не понял где ты видишь на скрине, что найдено 4 элемента ? И чем второй репост будет отличаться от первого ?
 
Я использую ChroPath.
это расширение кривой индус писал, он больше подходит для абсолютных путей, но если знаешь, что делаешь, то куда удобнее то расширение, которое я порекомендовал.
 
  • Спасибо
Реакции: Nekro
@backoff да хоть 10 тый, парень загнался

Screen Shot 2020-08-27 at 17.34.28.png
 
Я не понял где ты видишь на скрине, что найдено 4 элемента ? И чем второй репост будет отличаться от первого ?
Это не на скрине. У меня при использовании такого кода находит 4 элемента (поста).


это расширение кривой индус писал, он больше подходит для абсолютных путей, но если знаешь, что делаешь, то куда удобнее то расширение, которое я порекомендовал.
Хорошо. Спасибо. Попробую то, что ты предложил. Я первое попавшееся установил.

@backoff да хоть 10 тый, парень загнался
ТС дай конкретно ссылку на пост который надо репостнуть, кинь скрин со стрелками куда жать надо ...
У меня в репост идёт всегда первый пост. Независимо от того, какое всплывающее окно активно. Задача: нажать на кнопку "Опубликовать" только на том окне, которое сейчас перед глазами. А не по тем, которые идут в DOM. Там прицепиться не к чему. Очерёдность элементов тоже не могу использовать, потому что ситуация может быть когда репост поста может быть не нужен. Все ID и классы у этого окна динамические.

Проверка по содержанию - тоже не получится. Потому что там может быть картинка/цитата/видео и ещё какой либо формат поста. Если только под ВСЕ форматы поста делать проверку, а это очень большая работа.
 
Последнее редактирование:
я хз куда там тыкать, у ФБ совершенно конченное юзабилити ...
я так и не понял какой именно репост надо сделать, друзьям, на стены, в историю
У меня в репост идёт всегда первый пост
чего первый пост, группы, сообщества, друга? почему надо угадывать вечно, когда можно дать ссылку
сюда надо нажать? - http://joxi.ru/l2Z691wFzYLdY2
 
я хз куда там тыкать, у ФБ совершенно конченное юзабилити ...
я так и не понял какой именно репост надо сделать, друзьям, на стены, в историю

чего первый пост, группы, сообщества, друга? почему надо угадывать вечно, когда можно дать ссылку
сюда надо нажать? - http://joxi.ru/l2Z691wFzYLdY2
Теперь понял о чём речь. Вот:
62414



И далее в своей хронике.
 
млять, а еще меньше скрин можно сделать?
Понял, сейчас исправлю :-)

62415


чего первый пост, группы, сообщества, друга? почему надо угадывать вечно, когда можно дать ссылку
сюда надо нажать?
Пост сообщества. Продублирую на всякий случай:
 
Последнее редактирование:
я по этому примеру и делал - там нет больше чем одного элемента.
Screen Shot 2020-08-27 at 18.15.22.png


Если прям паронойя, щас запощу код для проверки видимиости.
 
короче, конченный фб, у меня такого нет нифига, ну да ладно. у тебя походу элементы дизайна старого еще

в общем есть простое решение: xpath видит ВСЕ элементы, надо прописать нужное так, чтоб совпадений не было
идешь в свой редактор xpath и поочередно подставляешь в путь номер совпадения, это будет так

C#:
Развернуть Свернуть Копировать
(//button[text()='Опубликовать'])[1]

цифру 1 поочередно менять на 2,3,4 пока не найдешь нужное совпадение
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)