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

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

. Блоки различаются между собой по названию классов и цифровому id. Как мне выполнить нажатие определенной кнопки?
IWebElement element = Browser.FindElement(By.ClassName(“b-koef”));
element.Click(); - данная конструкция не подходит, т.к. много одинаковых элементов “b-koef”, подскажите в каком направлении копать, куда двигаться?
Скрин кода с сайта: Sign in | VK

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

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

1 лайк

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

1 лайк

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

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

1 лайк

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

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

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