Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Бот на C# для сайта. Проблема с поиском элемента.

selenium
webdriver
Теги: #<Tag:0x00007f7b693a9fa8> #<Tag:0x00007f7b693b7ec8>

(Danis Mogwai) #1

Нужна ваша помощь! На сайте, для которого пишу бота много одинаковых кнопок, проблема в том, что они находятся в разных блоках

. Блоки различаются между собой по названию классов и цифровому id. Как мне выполнить нажатие определенной кнопки?
IWebElement element = Browser.FindElement(By.ClassName(“b-koef”));
element.Click(); - данная конструкция не подходит, т.к. много одинаковых элементов “b-koef”, подскажите в каком направлении копать, куда двигаться?
Скрин кода с сайта: https://vk.com/deus_ex.human.revolution?z=photo314526898_456240059%2Falbum314526898_00%2Frev

(Maxim Zaitsev) #2

Ну как-то найти элемент для начала. Если нужна конкретная кнопка, указанная на скриншоте, то можно попробовать такой css-селектор:

[data-id=16476] .b-team1 button


(Andrew Mad) #3

Вам нужна последняя кнопка или кнопка с определенным именем? По какому принципу была выбрана кнопка North Academy?
Я бы сначала нашел элемент более высокого уровня, b-game-block b-with additional userbet team2(Он уникален похоже и то что вам нужно). Затем уже к нему выполнил .FindElement(By.ClassName(“b-koef”));
Или нашел элемент с текстом North Academy, а потом осуществил бы поиск контейнере по .FindElement(By.ClassName(“b-koef”));


(Alexander) #4

Вам нужно сформировать правильный xpath или css селектор. Вместо By.ClassName осуществить поиск по By.Xpath или By.CssSelector, в зависимости от того какой селектор будете использовать.
http://scraping.pro/res/xpath-cheat/xpath_css_dom_recipes.pdf

Когда много одинаковых элементов, нужно искать то место, которым они разнятся. Это может быть порядковый номер, парент, параметр элемента. Какое-то уникальное место, которое различает два одинаковых элемента. У одного, например, на уровень выше есть спан с уникальным айди, а у другого нет. И тому подобное.


(Danis Mogwai) #5

Спасибо огромное! Очень помогли, теперь все заработало как я и хотел, получил доступ к интересующему меня элементу.
IWebElement element = Browser.FindElement(By.CssSelector("[data-id=‘16666’] .b-team1 button"));
element.Click();


(Danis Mogwai) #6

Мне нужно было получить доступ к элементу отвечавшему в том месте за кнопу. Название и прочая информация со временем на кнопке изменяется. Получилось сделать это с помощью CSS селектора по id одного блока и имени класса вложенного в него другого блока, решение найдено, спасибо!


(Danis Mogwai) #7

Спасибо, это получилось сделать с помощью CSS селектора!