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

Nekro

Client
Регистрация
01.08.2020
Сообщения
232
Благодарностей
24
Баллы
18
Здравствуйте.

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

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

backoff

Client
Регистрация
20.04.2015
Сообщения
6 052
Благодарностей
6 482
Баллы
113
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

one

Client
Регистрация
22.09.2015
Сообщения
6 833
Благодарностей
1 275
Баллы
113
Я умудрился экшеном реализовать. Тфу-тфу, пока работает. )))
62394
 

one

Client
Регистрация
22.09.2015
Сообщения
6 833
Благодарностей
1 275
Баллы
113
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]
 

backoff

Client
Регистрация
20.04.2015
Сообщения
6 052
Благодарностей
6 482
Баллы
113
походу больше одного элемента найдено ....
я всегда стараюсь сделать xpath так чтоб находился только 1 элемент
 

one

Client
Регистрация
22.09.2015
Сообщения
6 833
Благодарностей
1 275
Баллы
113
Эта ошибка выскакивает уже при запуске шаблона т.е. страница ФБ еще не загружена.
 

backoff

Client
Регистрация
20.04.2015
Сообщения
6 052
Благодарностей
6 482
Баллы
113

Nekro

Client
Регистрация
01.08.2020
Сообщения
232
Благодарностей
24
Баллы
18
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 (одинаковые). Поэтому и вопрос в клике по видимому элементу
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
значит слишком простой xpath . надо найти уникальные элементы, цепляться за них и уже через методы родители/братья идти до нужной кнопки
 

Nekro

Client
Регистрация
01.08.2020
Сообщения
232
Благодарностей
24
Баллы
18
значит слишком простой xpath . надо найти уникальные элементы, цепляться за них и уже через методы родители/братья идти до нужной кнопки
Это понятно. Я решил узнать есть ли решение кликнуть по видимому элементу через xpath, чтобы не писать километр кода. Изучив немного xpath я понял, что теоретически можно совместить любые элементы, которые содержаться на странице. Наверное придётся так и делать если не будет подходящего ответа.
 

luk911

Client
Регистрация
17.01.2013
Сообщения
1 542
Благодарностей
579
Баллы
113
В конце добавь [0]
кинь ссылку, сделаю
 

luk911

Client
Регистрация
17.01.2013
Сообщения
1 542
Благодарностей
579
Баллы
113
там не кнопка, там див
Screen Shot 2020-08-27 at 16.47.44.png
 

Nekro

Client
Регистрация
01.08.2020
Сообщения
232
Благодарностей
24
Баллы
18
там не кнопка, там див
В моём случае кнопка. Десктопное разрешение и классический дизайн Facebook. Я делаю репост со страницы по типу этой: https://www.facebook.com/cutecatpage/


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

На что кинуть ссылку? На проект?
 

luk911

Client
Регистрация
17.01.2013
Сообщения
1 542
Благодарностей
579
Баллы
113

luk911

Client
Регистрация
17.01.2013
Сообщения
1 542
Благодарностей
579
Баллы
113
репост
Screen Shot 2020-08-27 at 17.11.21.png
 

Nekro

Client
Регистрация
01.08.2020
Сообщения
232
Благодарностей
24
Баллы
18

luk911

Client
Регистрация
17.01.2013
Сообщения
1 542
Благодарностей
579
Баллы
113

luk911

Client
Регистрация
17.01.2013
Сообщения
1 542
Благодарностей
579
Баллы
113
Короче поставь расширение и тести
 

Nekro

Client
Регистрация
01.08.2020
Сообщения
232
Благодарностей
24
Баллы
18
обнови, добавил репост.
Так у меня такой же код в первом сообщении этой темы :-) Кликнуть по этой кнопке - не проблема. Проблема кликнуть по нужной кнопке. Ведь элемента 4, а кликать будет всегда по первому варианту. Даже если я буду репостить второй пост.


Короче поставь расширение и тести
Я использую ChroPath.
 

luk911

Client
Регистрация
17.01.2013
Сообщения
1 542
Благодарностей
579
Баллы
113
Так у меня такой же код в первом сообщении этой темы :-) Кликнуть по этой кнопке - не проблема. Проблема кликнуть по нужной кнопке. Ведь элемента 4, а кликать будет всегда по первому варианту. Даже если я буду репостить второй пост.
Я не понял где ты видишь на скрине, что найдено 4 элемента ? И чем второй репост будет отличаться от первого ?
 

luk911

Client
Регистрация
17.01.2013
Сообщения
1 542
Благодарностей
579
Баллы
113
Я использую ChroPath.
это расширение кривой индус писал, он больше подходит для абсолютных путей, но если знаешь, что делаешь, то куда удобнее то расширение, которое я порекомендовал.
 
  • Спасибо
Реакции: Nekro

backoff

Client
Регистрация
20.04.2015
Сообщения
6 052
Благодарностей
6 482
Баллы
113
ТС дай конкретно ссылку на пост который надо репостнуть, кинь скрин со стрелками куда жать надо ...
 

luk911

Client
Регистрация
17.01.2013
Сообщения
1 542
Благодарностей
579
Баллы
113
@backoff да хоть 10 тый, парень загнался

Screen Shot 2020-08-27 at 17.34.28.png
 

Nekro

Client
Регистрация
01.08.2020
Сообщения
232
Благодарностей
24
Баллы
18
Я не понял где ты видишь на скрине, что найдено 4 элемента ? И чем второй репост будет отличаться от первого ?
Это не на скрине. У меня при использовании такого кода находит 4 элемента (поста).


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

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

Проверка по содержанию - тоже не получится. Потому что там может быть картинка/цитата/видео и ещё какой либо формат поста. Если только под ВСЕ форматы поста делать проверку, а это очень большая работа.
 
Последнее редактирование:

backoff

Client
Регистрация
20.04.2015
Сообщения
6 052
Благодарностей
6 482
Баллы
113
я хз куда там тыкать, у ФБ совершенно конченное юзабилити ...
я так и не понял какой именно репост надо сделать, друзьям, на стены, в историю
У меня в репост идёт всегда первый пост
чего первый пост, группы, сообщества, друга? почему надо угадывать вечно, когда можно дать ссылку
сюда надо нажать? - http://joxi.ru/l2Z691wFzYLdY2
 

Nekro

Client
Регистрация
01.08.2020
Сообщения
232
Благодарностей
24
Баллы
18
я хз куда там тыкать, у ФБ совершенно конченное юзабилити ...
я так и не понял какой именно репост надо сделать, друзьям, на стены, в историю

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



И далее в своей хронике.
 

backoff

Client
Регистрация
20.04.2015
Сообщения
6 052
Благодарностей
6 482
Баллы
113
млять, а еще меньше скрин можно сделать?
 

Nekro

Client
Регистрация
01.08.2020
Сообщения
232
Благодарностей
24
Баллы
18
млять, а еще меньше скрин можно сделать?
Понял, сейчас исправлю :-)

62415


чего первый пост, группы, сообщества, друга? почему надо угадывать вечно, когда можно дать ссылку
сюда надо нажать?
Пост сообщества. Продублирую на всякий случай:
 
Последнее редактирование:

luk911

Client
Регистрация
17.01.2013
Сообщения
1 542
Благодарностей
579
Баллы
113
я по этому примеру и делал - там нет больше чем одного элемента.
Screen Shot 2020-08-27 at 18.15.22.png


Если прям паронойя, щас запощу код для проверки видимиости.
 

backoff

Client
Регистрация
20.04.2015
Сообщения
6 052
Благодарностей
6 482
Баллы
113
короче, конченный фб, у меня такого нет нифига, ну да ладно. у тебя походу элементы дизайна старого еще

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

C#:
(//button[text()='Опубликовать'])[1]
цифру 1 поочередно менять на 2,3,4 пока не найдешь нужное совпадение
 

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