С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.69/35: Рейтинг темы: голосов - 35, средняя оценка - 4.69
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175

Selenium как найти элемент

22.04.2020, 03:39. Показов 7872. Ответов 33
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, выбивает ошибку invalid selector: An invalid or illegal selector was specified
Вот блок кода в котором мне нужно выбрать первую предложенную строчку и кликнуть по ней.
Казалось бы просто можно по id выбрать
HTML5
1
alternative-email-0
но тоже выбивает ошибку. Подскажите как правильно составить путь к этому элементу
XML
1
<div data-test-id="alternative-emails"><div class="c011 c013 c015"><div style="height: 4px;"></div></div><div class="c011 c015"><div style="height: 4px;"></div></div><div data-test-id="alternative-email-0" data-email="inna-vasileva-1999@bk.ru"><a class="c01122">inna-vasileva-1999@bk.ru</a><div class="c011 c013 c015"><div style="height: 8px;"></div></div><div class="c011 c015"><div style="height: 8px;"></div></div></div><div data-test-id="alternative-email-1" data-email="inna.viki.vasileva@mail.ru"><a class="c01122">inna.viki.vasileva@mail.ru</a><div class="c011 c013 c015"><div style="height: 8px;"></div></div><div class="c011 c015"><div style="height: 8px;"></div></div></div><div data-test-id="alternative-email-2" data-email="inna-vasileva-1999@list.ru"><a class="c01122">inna-vasileva-1999@list.ru</a><div class="c011 c013 c015"><div style="height: 8px;"></div></div><div class="c011 c015"><div style="height: 8px;"></div></div></div><div data-test-id="alternative-email-3" data-email="innochka.viki.vasileva@mail.ru"><a class="c01122">innochka.viki.vasileva@mail.ru</a><div class="c011 c013 c015"><div style="height: 8px;"></div></div><div class="c011 c015"><div style="height: 8px;"></div></div></div></div>
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.04.2020, 03:39
Ответы с готовыми решениями:

[Selenium] Как найти элемент на странице с задержкой без ошибки?
Как найти элемент на странице с задержкой? И если вдруг данного элемента нету, то фунцкия продолжала работать, а не обсиралась... ...

Selenium findelement Не могу найти элемент
Вот элемент это поле для ввода текста &lt;input name=&quot;text_text&quot; value=&quot;1&quot; data-reactid=&quot;.0.2.0.0.0.0.0.1.0.1.0.0:$coi-1.$ci-1.0.1&quot;...

Как преобразовать найденный в Selenium элемент в тип double?
Как преобразовать найденный элемент в тип double? Пример IWebElement SearchInput = Browser.FindElement(By.Id(&quot;betSize&quot;)); ...

33
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,148
Записей в блоге: 43
22.04.2020, 14:56
Цитата Сообщение от xellan24rus Посмотреть сообщение
Казалось бы просто можно по id выбрать
Фиг его знает, как там это в селениуме делается, но CSS-селектор по такому id будет выглядеть так #alternative-email-0
0
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
22.04.2020, 15:51  [ТС]
Цитата Сообщение от diadiavova Посмотреть сообщение
CSS-селектор по такому id будет выглядеть так #alternative-email-0
Селениум умеет считывает имена класса, id и прочее. Именно в этом случае почему то ошибка. Я не могу выполнить действие или просто считать текст по id, имени класса так как это контейнер, имя класса одно, по селектору тоже не выходит. А как сделать Xpatch путь я не нашел как это для селениума организовать.
0
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,148
Записей в блоге: 43
22.04.2020, 16:26
xellan24rus, скопировал код, вставил в редактор и отформатировал его. В удобочитаемом виде он выглядит вот так
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<div data-test-id="alternative-emails">
    <div class="c011 c013 c015">
        <div style="height: 4px;"></div>
    </div>
    <div class="c011 c015">
        <div style="height: 4px;"></div>
    </div>
    <div data-test-id="alternative-email-0" data-email="inna-vasileva-1999@bk.ru"><a
            class="c01122">inna-vasileva-1999@bk.ru</a>
        <div class="c011 c013 c015">
            <div style="height: 8px;"></div>
        </div>
        <div class="c011 c015">
            <div style="height: 8px;"></div>
        </div>
    </div>
    <div data-test-id="alternative-email-1" data-email="inna.viki.vasileva@mail.ru"><a
            class="c01122">inna.viki.vasileva@mail.ru</a>
        <div class="c011 c013 c015">
            <div style="height: 8px;"></div>
        </div>
        <div class="c011 c015">
            <div style="height: 8px;"></div>
        </div>
    </div>
    <div data-test-id="alternative-email-2" data-email="inna-vasileva-1999@list.ru"><a
            class="c01122">inna-vasileva-1999@list.ru</a>
        <div class="c011 c013 c015">
            <div style="height: 8px;"></div>
        </div>
        <div class="c011 c015">
            <div style="height: 8px;"></div>
        </div>
    </div>
    <div data-test-id="alternative-email-3" data-email="innochka.viki.vasileva@mail.ru"><a
            class="c01122">innochka.viki.vasileva@mail.ru</a>
        <div class="c011 c013 c015">
            <div style="height: 8px;"></div>
        </div>
        <div class="c011 c015">
            <div style="height: 8px;"></div>
        </div>
    </div>
</div>
Сразу все стало понятно. Я так понимаю, нужен вот этот элемент?
HTML5
1
    <div data-test-id="alternative-email-0" data-email="inna-vasileva-1999@bk.ru">
Ну так его не по ид надо искать, а по data-test-id
0
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
22.04.2020, 16:40  [ТС]
Цитата Сообщение от diadiavova Посмотреть сообщение
<div data-test-id="alternative-email-0" data-email="inna-vasileva-1999@bk.ru">
Ну так его не по ид надо искать, а по data-test-id
По логике селениума data-test-id = alternative-email-0. То есть id это alternative-email-0 и его нужно указать, чтобы получить или сделать что то с ним. И как я понял селениум не умеет делать перебор всего класса например, то есть спарсить все значения. Уже второй день воюю с этим. Видел пишут про Xpatch в такой ситуации, но в коде с id и с селектором всё прозрачно, не пойму почему так.Вся загвоздка в том что в версии для пк на сайте, эти id не получить даже, то есть они появляются только при наведении мыши в эту область, магическим образом в нескольких классах ставятся значения true и еще где то меняется код и высвечивается контейнер для выбора, то есть обычным парсером я не представляю как это сделать. В селениуме сделал моб эмуляцию, и id, селекторы и т.п они есть, но не могу получить данные из за ошибки, что не найден элемент, а он есть этот блок кода это подтверждает, он не меняется. Многовато расписал)
0
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,148
Записей в блоге: 43
22.04.2020, 16:51
Цитата Сообщение от xellan24rus Посмотреть сообщение
То есть id это alternative-email-0
С чего бы это? Это значение атрибута data-test-id, а атрибут id так и называется. Я не знаю, какие в селениуме селекторы, но если это искать с помощью обычных CSS-селекторов, то это будет выглядеть так [data-test-id='alternative-email-0']. Если доступен поиск по XPath, то вот это поможет //div[@data-test-id='alternative-email-0']
0
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
22.04.2020, 17:12  [ТС]
Цитата Сообщение от diadiavova Посмотреть сообщение
С чего бы это? Это значение атрибута data-test-id, а атрибут id так и называется.
Точно, это я не так выразился. Скорее всего элементы сайта не хотят считываться, тоже так не работает. Перепробовал всё теперь.
0
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,148
Записей в блоге: 43
22.04.2020, 17:27
Лучший ответ Сообщение было отмечено xellan24rus как решение

Решение

Цитата Сообщение от xellan24rus Посмотреть сообщение
Перепробовал всё теперь.
А как именно ты перепробовал можно узнать? Выражения работают, вот страница, в которой сначала по css находится элемент и алерт выдает его код, потом то же по xpath.
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<!DOCTYPE html>
<html lang="en">
 
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
 
<body>
    <div data-test-id="alternative-emails">
        <div class="c011 c013 c015">
            <div style="height: 4px;"></div>
        </div>
        <div class="c011 c015">
            <div style="height: 4px;"></div>
        </div>
        <div data-test-id="alternative-email-0" data-email="inna-vasileva-1999@bk.ru"><a
                class="c01122">inna-vasileva-1999@bk.ru</a>
            <div class="c011 c013 c015">
                <div style="height: 8px;"></div>
            </div>
            <div class="c011 c015">
                <div style="height: 8px;"></div>
            </div>
        </div>
        <div data-test-id="alternative-email-1" data-email="inna.viki.vasileva@mail.ru"><a
                class="c01122">inna.viki.vasileva@mail.ru</a>
            <div class="c011 c013 c015">
                <div style="height: 8px;"></div>
            </div>
            <div class="c011 c015">
                <div style="height: 8px;"></div>
            </div>
        </div>
        <div data-test-id="alternative-email-2" data-email="inna-vasileva-1999@list.ru"><a
                class="c01122">inna-vasileva-1999@list.ru</a>
            <div class="c011 c013 c015">
                <div style="height: 8px;"></div>
            </div>
            <div class="c011 c015">
                <div style="height: 8px;"></div>
            </div>
        </div>
        <div data-test-id="alternative-email-3" data-email="innochka.viki.vasileva@mail.ru"><a
                class="c01122">innochka.viki.vasileva@mail.ru</a>
            <div class="c011 c013 c015">
                <div style="height: 8px;"></div>
            </div>
            <div class="c011 c015">
                <div style="height: 8px;"></div>
            </div>
        </div>
    </div>
 
    <script>
        let cssel = document.querySelector("[data-test-id='alternative-email-0']");
        alert("css result: " + cssel.outerHTML);
 
        let xpath = document.evaluate("//div[@data-test-id='alternative-email-0']", document, null, 0, null);
        let el = xpath.iterateNext();
        alert("xpath result: " + el.outerHTML);
 
 
    </script>
</body>
 
</html>
С селениумом не работал, но если загуглить, то вот Локаторы. CSS, XPATH, JQUERY. | Selenium Webdriver Там описывается поиск разными способами. Ты так же делал?
1
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
22.04.2020, 17:57  [ТС]
Цитата Сообщение от diadiavova Посмотреть сообщение
С селениумом не работал, но если загуглить, то вот Локаторы. CSS, XPATH, JQUERY. | Selenium Webdriver Там описывается поиск разными способами. Ты так же делал?
Да всё так же делаю. Не которые действия у меня работают через селекторы хорошо, с тем учетом что я просто нажимал в гугле копировать селектор на нужный мне элемент и вставлял в селениум и работает с другими кнопками.
0
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
22.04.2020, 18:18  [ТС]
diadiavova, вот скриншот на сайте, не находит в самом браузере почему то.
0
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
22.04.2020, 18:40  [ТС]
Точнее не то заскринил. Скорее всего надо добавить, другой парсер, для поиска, раз селениум не может найти.
0
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,148
Записей в блоге: 43
22.04.2020, 19:03
Цитата Сообщение от xellan24rus Посмотреть сообщение
вот скриншот на сайте, не находит в самом браузере почему то.
Я с инструментами хрома не знаком особо, в основном файрфоксом пользуюсь. Но насколько я понял, на той вкладке, что у тебя не скриншоте ищутся именно селекторы стилей, а не элементы. В лисе можно открыть инспектор, там есть поле поиска и ввести селектор туда, он все находит. Попробовал не на сайте, разумеется, а на той страничке, что выложил выше. В хроме в той же вкладке тоже ничего не находит.
0
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
22.04.2020, 19:18  [ТС]
diadiavova, это я не то еще заскринил, две кнопки забыл нажать, для смены поиска. Сверил еще с пк версией находит по id, но имена классов другие, но это не так важно. Проблема или в силинеуме или сайт не даёт. Я до этого ничего не парсил, опыта мало, но там все прозрачно по id и селекторам. Поделитесь каким парсером пользуетесь и кусочком кода для него?
0
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,148
Записей в блоге: 43
22.04.2020, 19:35
Цитата Сообщение от xellan24rus Посмотреть сообщение
Поделитесь каким парсером пользуетесь и кусочком кода для него?
В смысле каким парсером? Я все в браузере делаю.
0
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
22.04.2020, 19:42  [ТС]
Цитата Сообщение от diadiavova Посмотреть сообщение
В смысле каким парсером? Я все в браузере делаю
Я думал вы парсите иногда, селекторы и т.п не знаю где ещё используют.
0
19 / 14 / 6
Регистрация: 01.04.2020
Сообщений: 81
23.04.2020, 00:12
xellan24rus, всё просто.
Селениум не найдет элемент, который недоступен (не отрендерен в браузере).
Пример...
Если нужен какой-то элемент выпадающего списка и он виден в HTML, то для селениум он не видим до тех пор, пока пользователь в браузере не выберет этот элемент.
Тоже самое касается полей, которые с аттрибутами hidden, disabled и пр. всё это невидимо для него, до тех пор, пока не станет активным.
Это сделано специально, т.к. селениум, это не инструмент для парсинга. Это инструмент для юнит тестирования, следовательно, поведение при работе с DOM и его элементами должно быть аналогично тому, как будто с браузером работает реальный человек.

Ну и напоследок...
На многих сайтах динамический DOM и возможно, что в тот момент, когда вы делаете поиск, этот элемент еще не подгрузился.
0
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
23.04.2020, 13:33  [ТС]
Semen Lobanov, вы верно написали. Элемент подгружается 100% я задержку ставлю, и про скрытый элемент, да он скрыт. но я сделал так чтобы цикл действий делал его видимым, то есть его можно найти, и id всегда одинаковое. Ну ничего прикручу парсер для этого, возможно поможет. По умолчанию элементы скрыты, но при вводе они становятся, активны, и их не может найти селениум.
0
19 / 14 / 6
Регистрация: 01.04.2020
Сообщений: 81
23.04.2020, 14:04
xellan24rus, если вам нужен только парсинг, то на кой черт вам эти селениумские селекторы?
После, как вы сказали "цикла действий", забирайте весь HTML, а далее уже работайте с ним нормальными библиотеками, например - htmlagilitypack. Этой библиотеке абсолютно по барабану, видимый элемент или нет, она делает выборки быстро, четко и без сюрпризов.
0
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
23.04.2020, 14:28  [ТС]
Semen Lobanov, я им поля заполняю, а потом сбор вывода) Казолось бы можно добавить парсер в конце для этого, но ссылка уникальная второй раз туда не зайдешь. htmlagilitypack я не в курсе он умеет ли он делать клики. Видел что то про управление контекстным меню в селениуме, но не знаю возможно ли выделять текст так. Помучаюсь еще, например спарсив ссылку в селениуме, можно скачать передав её, в WebClient. Если найду любое решение сюда выложу.
0
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
26.04.2020, 15:36  [ТС]
Цитата Сообщение от Semen Lobanov Посмотреть сообщение
htmlagilitypack
Решил попробовать, но не могу разобраться как правильно указывать для него путь.
Код
C#
1
2
3
4
5
6
7
8
var html = doc_user; ;
 
            var htmlDoc = new HtmlAgilityPack.HtmlDocument();
            htmlDoc.LoadHtml(html);
 
            var name_user = htmlDoc.DocumentNode.SelectSingleNode("div[@SKguc]/a").Attributes["href"].Value;
 
            textBox2.Text = name_user;
И сама само поле для поиска
HTML5
1
<div class="_0v2O4 "><div class="SKguc"><a class="gmFkV" href="/xellan24rus/">xellan24rus</a></div><div class="f5Yes oL_O8"></div></div>
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.04.2020, 15:36
Помогаю со студенческими работами здесь

Selenium Driver. Нажатие на элемент
Нужно нажать на ссылку &lt;div class=&quot;msgDv2 blk&quot;&gt; &lt;a href=&quot;javascript:;&quot; onclick=&quot;wClose()&quot; class=&quot;button small2 orange&quot;&gt; ...

Клик на определенный элемент Selenium
Здравствуйте, как сделать клик на определенный элемент? Допустим есть три элемента, но нужно кликнуть только на первый.

Элемент найден, но выдает ошибку (Selenium)
Всем здравствуйте! Подскажите пожалуйста, кто сталкивался с такой ситуацией, что элемент найден в html но движок выдает ошибку. Unknown...

Как найти max элемент в двумерном массиве, и как найти min элемент в одномерном массиве?
Не работает программа, ошибки. Вроде понял, как сделать min и max элементы для одномерного массива, который заполняется с клавиатуры. А...

Как найти элемент по NAME в XPATH Selenium Java?
Привет. Есть элемент &lt;input type=&quot;password&quot; name=&quot;password&quot;&gt; Как мне сделать верный xpath? Я попробовал так, но это не сработало ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru