Прописать xpath путь к нужному svg

  • Автор темы Автор темы Mrak21212
  • Дата начала Дата начала

Mrak21212

Новичок
Регистрация
08.10.2023
Сообщения
6
Реакции
0
Баллы
1
Добрый вечер! Только недавно залез в зенку и пытаюсь разобраться. Нужно прописать правильный xpath путь к нужному SVG.
На данный момент смог сделать только это
C#:
Развернуть Свернуть Копировать
//div[@id='root']//div[@class='Flex_flex__2sTHk Flex_flexRow__1XYls container_siteContainer__160y-']//div[@class='DesktopFrame_mainContainer__2V8Re']//div[@class='container_mainSubContainer__39U6P']//div[@class='DetailContainer_stream__2efLF']//div[@class='Card_card__3JaBr Card_isShadow__2I3Nz DetailContainer_streamMain__AJvS3']//div[@class='ArticleContent_articleMain__2EFKB DetailContainer_content__1v_bX']//div[@class='ArticleContent_operations__3uz0h ArticleContent_footerOperations__avTNd']//div[@class='ArticleContent_operation__1yHNs']//div[@class='ArticleContent_opIconWrap__3YjdX ArticleContent_bigSizeOpIconWrap__2LDin']

На сайте несколько svg, отличаются они только path
112971


Как мне продолжить путь к выделенному SVG ?
 
//path[@fill="currentColor"]
?
ps. Не после своего длинного пути добавить, а только его.
 
Последнее редактирование:
//path[@fill="currentColor"]
?
Извиняюсь, похоже недостаточно точно описал проблему. Есть кнопка которая активируется только при наведении, путь xpath автоматически не находится, поэтому пришлось прописывать его полностью.
Но проблема в том, что таких кнопок 3, контейнеры называются одинаково, отличаются только атрибутом d.
112973

Пытаюсь прописать путь до атрибута d, что-то делаю не так...
C#:
Развернуть Свернуть Копировать
//div[@id='root']//div[@class='Flex_flex__2sTHk Flex_flexRow__1XYls container_siteContainer__160y-']//div[@class='DesktopFrame_mainContainer__2V8Re']//div[@class='container_mainSubContainer__39U6P']//div[@class='DetailContainer_stream__2efLF']//div[@class='Card_card__3JaBr Card_isShadow__2I3Nz DetailContainer_streamMain__AJvS3']//div[@class='ArticleContent_articleMain__2EFKB DetailContainer_content__1v_bX']//div[@class='ArticleContent_operations__3uz0h ArticleContent_footerOperations__avTNd']//div[@class='ArticleContent_operation__1yHNs']//div[@class='ArticleContent_opIconWrap__3YjdX ArticleContent_bigSizeOpIconWrap__2LDin']//svg [@width='16' height='16' viewBox='0 0 16 16' fill='none' color='']//path [@d='M1.91836 3.67689C1.91836 3.5212 2.00943 3.37991 2.15122 3.31561L5.48759 1.80253C7.08365 1.07871 8.9144 1.07871 10.5105 1.80254L13.8468 3.31561C13.9886 3.37991 14.0797 3.5212 14.0797 3.67689V7.48553C14.0797 11.1873 11.5871 14.425 8.00846 15.3717C8.00228 15.3734 7.99577 15.3734 7.98959 15.3717C4.41093 14.425 1.91836 11.1873 1.91836 7.48552V3.67689Z']
 
HTML код страницы файлом прикрепите сюда, или урл дайте, если она доступна без авторизации. Там насколько я помню зенка не любит теги SVG\PATH в xPath, надо их через "*" в путях обозначать или может еще какой-то костыль.
 
HTML код страницы файлом прикрепите сюда, или урл дайте, если она доступна без авторизации. Там насколько я помню зенка не любит теги SVG\PATH в xPath, надо их через "*" в путях обозначать или может еще какой-то костыль.
https://debank.com/stream/769360 доступна без авторизации.
Пытаюсь найти вот эту кнопку
112980
1697568578469.png
 
Ну, если совсем дефолтно, то кликается вот так:

C#:
Развернуть Свернуть Копировать
// Находим кнопку
HtmlElement he = instance.ActiveTab.GetDocumentByAddress("0").FindElementByXPath("//div[@class=\"ArticleContent_operation__1yHNs\"]", 1);
if (he.IsVoid) return -1;

// Задержка эмуляции
instance.WaitFieldEmulationDelay();
// Вызвать событие "click"
he.RiseEvent("click", instance.EmulationLevel);

Но я бы через contains сделал, скорее всего, хвост у class меняется.

update:
Сработал вот такой:
C#:
Развернуть Свернуть Копировать
// Находим кнопку
HtmlElement he = instance.ActiveTab.GetDocumentByAddress("0").FindElementByXPath("//div[contains(@class, 'ArticleContent_operation')]", 5);
if (he.IsVoid) return -1;

// Задержка эмуляции
instance.WaitFieldEmulationDelay();
// Вызвать событие "click"
he.RiseEvent("click", instance.EmulationLevel);
Но надо элементы смотреть внимательнее, вдруг на разных страницах разное число ))
 
  • Спасибо
Реакции: Mrak21212
Ну, если совсем дефолтно, то кликается вот так:

C#:
Развернуть Свернуть Копировать
// Находим кнопку
HtmlElement he = instance.ActiveTab.GetDocumentByAddress("0").FindElementByXPath("//div[@class=\"ArticleContent_operation__1yHNs\"]", 1);
if (he.IsVoid) return -1;

// Задержка эмуляции
instance.WaitFieldEmulationDelay();
// Вызвать событие "click"
he.RiseEvent("click", instance.EmulationLevel);

Но я бы через contains сделал, скорее всего, хвост у class меняется.
В этом случае он кликает по самой первой кнопке, нужна вот эта
112982
 
  • Спасибо
Реакции: Mrak21212
Ну, если совсем дефолтно, то кликается вот так:

C#:
Развернуть Свернуть Копировать
// Находим кнопку
HtmlElement he = instance.ActiveTab.GetDocumentByAddress("0").FindElementByXPath("//div[@class=\"ArticleContent_operation__1yHNs\"]", 1);
if (he.IsVoid) return -1;

// Задержка эмуляции
instance.WaitFieldEmulationDelay();
// Вызвать событие "click"
he.RiseEvent("click", instance.EmulationLevel);

Но я бы через contains сделал, скорее всего, хвост у class меняется.

update:
Сработал вот такой:
C#:
Развернуть Свернуть Копировать
// Находим кнопку
HtmlElement he = instance.ActiveTab.GetDocumentByAddress("0").FindElementByXPath("//div[contains(@class, 'ArticleContent_operation')]", 5);
if (he.IsVoid) return -1;

// Задержка эмуляции
instance.WaitFieldEmulationDelay();
// Вызвать событие "click"
he.RiseEvent("click", instance.EmulationLevel);
Но надо элементы смотреть внимательнее, вдруг на разных страницах разное число ))
Спасибо огромное! Очень помогли
 
  • Спасибо
Реакции: Mrak21212
Ну если атрибут d там не меняется, и он главное отличие, то к нему и привяжемся:
Код:
Развернуть Свернуть Копировать
//*[starts-with(@d,'M3.00154')]
 
  • Спасибо
Реакции: Mrak21212 и Moonwalker

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