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

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

22.04.2020, 03:39. Показов 8026. Ответов 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
7261 / 2608 / 745
Регистрация: 11.04.2015
Сообщений: 4,155
Записей в блоге: 43
26.04.2020, 15:45
Студворк — интернет-сервис помощи студентам
//div[@class = 'ASKguc']/a
0
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
26.04.2020, 16:04  [ТС]
diadiavova,
Всё равно не выходит, в переменной doc_user сайт загружается, а вот найти значение не выходит. Я в этих выражениях еще не очень разбираюсь, с трудом составляю эти селекторы и xpatch, не научился еще.
0
 Аватар для diadiavova
7261 / 2608 / 745
Регистрация: 11.04.2015
Сообщений: 4,155
Записей в блоге: 43
26.04.2020, 16:46
xellan24rus, насколько я помню, методу loadHTML нужно передавать HTML код документа. Если нужно передать адрес, по-моему надо использовать метод load. Ну и вообще надо посмотреть , что у тебя в документе, поскольку иногда с сервера приходит не тот документ который видно в окне браузера, а значительная его часть подгружается скриптами, так что нужно убедиться в том, что то что ты ищешь присутствует в загруженной тобой версии документа.

Добавлено через 30 минут
xellan24rus, в имени класса у меня появилась лишняя буква A, с телефона вводил текст. Так что
//div[@class = 'SKguc']/a
И кстати можно получить сразу узел атрибута вот так //div[@class = 'SKguc']/a/@href
0
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
26.04.2020, 16:50  [ТС]
Цитата Сообщение от diadiavova Посмотреть сообщение
насколько я помню, методу loadHTML нужно передавать HTML код документа. Если нужно передать адрес, по-моему надо использовать метод load.
Да это так всё.
Сделал как вы написали, извлёк все данные из переменной, да там нету таких классов. И поиск по имени
дал, не 18, а 8 результатов. Вот одна строчка.
Кликните здесь для просмотра всего текста
HTML5
1
<script type="text/javascript" src="/static/bundles/metro/FeedSidebarContainer.js/97f4c995ff98.js" crossorigin="anonymous" charset="utf-8" async=""></script><script type="text/javascript">window._sharedData = {"config":{"csrf_token":"BhVvW","viewer":{"biography":"","external_url":null,"full_name":"","has_phone_number":true,"has_profile_pic":true,"has_tabbed_inbox":false,"id":"397543","is_joined_recently":false,"is_private":false,"profile_pic_url":"https://instagram.fhel4-1.fna.fbcdn.net/v/t51.2885-19/s150x150/92300281_831042787396242_6837378997957951488_n.jpg?_nc_ht=instagram.fhel4-1.fna.fbcdn.net\u0026_nc_ohc=UkTFwwmzxysAX9GeLrQ\u0026oh=abba2b22f309e903dad410211b3e0815\u0026oe=5ECD47F8","profile_pic_url_hd":"https://instagrambcdn.net/v/t51.2885-19/s320x320/92300281_831042787396242_6837378997957951488_n.jpg?_nc_ht=instagram.fhel4-1.fna.fbcdn.net\u0026_nc_ohc=UkTFwwmzxysAX9GeLrQ\u0026oh=016d4e8d8b6213b4451f6e46792b34ea\u0026oe=5ECF4908","username":"xellan24rus","badge_count":

Я её укоротил раза в три оставил, по username. Я думаю по таким параметрам xpath или по селекторам уже не выйдет спарсить имя? По ссылке в моём варианте нельзя получить данные.
0
 Аватар для diadiavova
7261 / 2608 / 745
Регистрация: 11.04.2015
Сообщений: 4,155
Записей в блоге: 43
26.04.2020, 17:15
Цитата Сообщение от xellan24rus Посмотреть сообщение
Я думаю по таким параметрам xpath или по селекторам уже не выйдет спарсить имя?
И то и другое полезно для поиска узлов документа. В данном случае их можно использовать для поиска нужного скрипта по расположению в документе. Например, если эти два элемента script расположены рядом в документе, то второй можно найти по первому, а первый по атрибуту src или части его значения
css - script[src $= '97f4c995ff98.js']+script
xpath - //script[contains(@src, '97f4c995ff98.js')]/following-sibling::script
Надеюсь не ошибся ))
Ну, а содержимое скрипта уже можно и регулярками, хотя JSON можно и просто строковыми функциями вытащить, а потом уже ньютонсофтом. В принципе, если получить просто HTML текст документа, то по строке window._sharedData = скорей всего можно найти начало нужного кода, а дальше уже искать json, если нужен он, конечно.
0
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
26.04.2020, 17:49  [ТС]
Цитата Сообщение от diadiavova Посмотреть сообщение
css - script[src $= '97f4c995ff98.js']+script
xpath - //script[contains(@src, '97f4c995ff98.js')]/following-sibling::script
HtmlAgilityPack пишет неверный указатель. Да ньютонсофт нужно тоже поучить. А про регулярки, составил два выражения, но на выходе нету ошибок, но и не выводится никакой информации.Покажите пример как нужно?
C#
1
2
 textBox2.Text = Regex.Match(textBox1.Text, "src=\"97f4c995ff98.js\"username\":(.*?)\"").Groups[1].Value;
            textBox2.Text = Regex.Match(textBox1.Text, "script type=\"text/javascript\" src=\"/static/bundles/metro/FeedSidebarContainer.js/97f4c995ff98.js\"username\":\"(.*?)").Groups[1].Value;
0
19 / 14 / 6
Регистрация: 01.04.2020
Сообщений: 81
26.04.2020, 22:27
xellan24rus,
XML
1
//div[@class='SKguc']/a
0
 Аватар для diadiavova
7261 / 2608 / 745
Регистрация: 11.04.2015
Сообщений: 4,155
Записей в блоге: 43
26.04.2020, 22:49
Цитата Сообщение от xellan24rus Посмотреть сообщение
HtmlAgilityPack пишет неверный указатель.
Я думаю, так мы далеко не уедем. Давай сделаем так: ты выложишь пример документа, в том виде в котором он приходит с сервера, точно опишешь, что именно ты хочешь оттуда извлечь, а я сделаю проектик, где покажу как это надо делать. Иначе мы так можем до бесконечности переписываться.

Добавлено через 1 минуту
Semen Lobanov, было уже
https://www.cyberforum.ru/post14475474.html
0
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
27.04.2020, 07:10  [ТС]
Цитата Сообщение от diadiavova Посмотреть сообщение
Я думаю, так мы далеко не уедем. Давай сделаем так: ты выложишь пример документа, в том виде в котором он приходит с сервера, точно опишешь, что именно ты хочешь оттуда извлечь, а я сделаю проектик, где покажу как это надо делать. Иначе мы так можем до бесконечности переписываться.
Тоже верно. Пример файла в текстовом документе.
0
 Аватар для diadiavova
7261 / 2608 / 745
Регистрация: 11.04.2015
Сообщений: 4,155
Записей в блоге: 43
27.04.2020, 09:25
Лучший ответ Сообщение было отмечено xellan24rus как решение

Решение

xellan24rus, ну как бы файл это, конечно, хорошо, но написать, что нужно извлечь - тоже не помешало бы.

В проекте я извлекаю из страницы скрипт, начинающийся с window._sharedData = , удаляю из его кода все, кроме JSON, далее превращаю JSON в объект и демонстрирую, как из этого объекта извлекать данные.
Я там использовал не то выражение, которое показывал здесь, но думаю, что и то тоже сработало бы, просто показал как можно найти элемент, по содержащемуся в нем тексту.
Вложения
Тип файла: zip ExtractDataFromHtml.zip (13.96 Мб, 3 просмотров)
1
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
27.04.2020, 10:16  [ТС]
diadiavova, примерно понял, при всём диалоге узнал полезное. Буду дальше изучать как это всё работает)
0
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
27.04.2020, 10:43  [ТС]
diadiavova, и ещё вопрос например мой блок кода для поиска такой
C#
1
<a class="-nal3 " href="/xellan24rus/followers/"><span class="g47SY " title="6">6</span> подписчиков</a>
Я ищу таким образом //div[@class='-nal3 ']/a Указываю класс блока и всё ищу всё что находится в блоке "а", указываю атрибут title c которого хочу получить текст. И например если класс указан с пробелом его так и писать?
Сам код
C#
1
2
3
4
5
       var url = "https://www.instagram.com/sumkabum_nsk/";
                HtmlWeb web = new HtmlWeb();
                var htmlDoc = web.Load(url); //В HtmlAgilityPack загружаю по ссылке, 
                var node = htmlDoc.DocumentNode.SelectSingleNode("//div[@class='-nal3 ']/a").Attributes["title"].Value;
                textBox2.Text = node;
Что хочу спарсить это число подписчиков.
И если классы указаны с не понятно как что с ними делать?
Я стараюсь брать данные в инспекторе хрома или правильнее с исходного кода страницы?
[SPOILER][HTML]<section class="zwlfE"><div class="nZSzR"><h2 class="_7UhW9 fKFbl yUEEX KV-D4 fDxYl ">sumkabum_nsk</h2><div class=" Igw0E IwRSH eGOV_ _4EzTm "><span class="BY3EC bqE32"><span class="vBF20 _1OSdk"><button class="_5f5mN jIbKX _6VtSN yZn4P ">Подписаться</button></span><span class="mLCHD _1OSdk"><button class="_5f5mN jIbKX KUBKM yZn4P "><div class="OfoBO"><div class="_5fEvj coreSpriteDropdownArrowWhite"></div></div></button></span></span></div><div class="AFWDX"><button class="wpO6b " type="button"><svg aria-label="Параметры" class="_8-yf5 " fill="#262626" height="24" viewBox="0 0 48 48" width="24"><circle clip-rule="evenodd" cx="8" cy="24" fill-rule="evenodd" r="4.5"></circle><circle clip-rule="evenodd" cx="24" cy="24" fill-rule="evenodd" r="4.5"></circle><circle clip-rule="evenodd" cx="40" cy="24" fill-rule="evenodd" r="4.5"></circle></svg></button></div></div><ul class="k9GMp "><li class="Y8-fY "><span class="-nal3 "><span class="g47SY ">77</span> публикаций</span></li><li class="Y8-fY "><a class="-nal3 " href="/sumkabum_nsk/followers/"><span class="g47SY " title="595">595</span> подписчиков</a></li><li class="Y8-fY "><a class="-nal3 " href="/sumkabum_nsk/following/"><span class="g47SY ">2 082</span> подписок</a></li></ul><div class="-vDIg"><h1 class="rhpdm">Сумки Нижнеудинск</h1><br><span>Лучшее лучшим ♥️<br>Натуральная и экокожа
0
 Аватар для diadiavova
7261 / 2608 / 745
Регистрация: 11.04.2015
Сообщений: 4,155
Записей в блоге: 43
27.04.2020, 11:05
Цитата Сообщение от xellan24rus Посмотреть сообщение
И например если класс указан с пробелом его так и писать?
Если такое положение вещей сохраняется всегда, тогда да - так и пиши. Но с классами там могут быть нюансы, их могут довольно часто менять, может получиться так, что помимо этого класса там окажутся еще какие-то. Если такая ситуация возможна, то используй функцию contains, с ее помощью можно найти строку, по подстроке. Я уже приводил пример выше, да и во вложении тоже используется эта функция.
Цитата Сообщение от xellan24rus Посмотреть сообщение
Я стараюсь брать данные в инспекторе хрома или правильнее с исходного кода страницы?
Если ты собираешься программно запрашивать страницу и извлекать данные из нее, то по ней и ориентируйся, в браузере код в значительной мере сгенерирован скриптами, так что, если ты хочешь получить страницу в таком виде, ее сначала придется загрузить в браузер.
Цитата Сообщение от xellan24rus Посмотреть сообщение
Здесь классы указаны не понятно как, не понимаю как такое объявить.
Либо через контэнйнс типа button[contains(@class, 'jIbKX')], либо можно поставить HtmlAgilityPack.CssSelectors и искать по селекторам, тогда можно указать любой из классов, например для предыдущего примера можно искать так button.jIbKX или даже так .jIbKX или можно несколько классов через точку указать. Но еще раз повторюсь, что скорей всего в том документе, что приходит с сервера всего этого нет, там в скриптах приходят данные, которые рендерятся уже на стороне клиента, так что придется искать то что тебе нужно в этих данных. Если там этого нет, то, возможно, какие-то данные подгружаются уже после загрузки страницы или содержатся в скриптах, приходящих отдельно. Надо искать. Если это сложно, то можно использовать какой-то контрол типа WebBrowser, только посовременнее и уже оттуда можно тянуть готовые данные, тогда для исследования и инспектор хрома вполне сгодится.
0
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
27.04.2020, 11:27  [ТС]
diadiavova, Можно страницу страницу загружать через leafxnet с заголовками всеми, но опять же Если зайти в браузере на сайт и после нажать исходный код страницы и выполнить поиск по имени класса с инспектора, то таких классов в исходном коде не существует. Даже в примере файла что я отправлял, данные были загружены через leafxnet с заголовками и авторизованными куками, но я их удалил в этом файле. Имени класса что есть в инспекторе, я не находил в этом файле. Через ньютонсофт скорее всего лучше разбирать в этом случае. С того же HtmlAgilityPack классы не нахожу потому что их попрасту не существует. Ну конечно хотелось бы без классов информацию получать, буду изучать Ньютонсофт
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.04.2020, 11:27
Помогаю со студенческими работами здесь

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? Я попробовал так, но это не сработало ...


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

Или воспользуйтесь поиском по форуму:
34
Ответ Создать тему
Новые блоги и статьи
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
Модель здравосохранения 17. Планы на выгорание
anaschu 23.05.2026
Вот конкретная схема реализации: В классе Работник добавить: накопленнаяУсталость — растёт каждый час работы, снижается в перерывы и болезни коэффициентПрезентеизма — снижает продуктивность. . .
Изменение цветов в палитре gif файла aka фавикона
russiannick 23.05.2026
Изменение цветов в палитре gif файла, юзаемого как фавиконка в составе html-файла, помещенная в base64, средствами нативного Java Script, навеянное сном в майский день. Для работы необходим браузер,. . .
Модель здравосохранения 16. Слишком хорошие и здоровые сотрудники уходят, недовольные зарплатой
anaschu 23.05.2026
Отладка увольнений и настройка производительности Сегодня во второй половине дня разобрались с механикой увольнений и настроили коэффициент сложности заданий. Вот что было сделано. . . .
Как я стал коммунистом))) Модель сохранения здоровья сотрудников, запись блога номер 15
anaschu 23.05.2026
Внезапно хорошее здоровье сотрудников не нужно капиталистам?))
Модель здравоСохранения 15. Как мы чинили AnyLogic модель рабочего коллектива: сочленение диаграммы состояний болезней и поломок в ресурспул
anaschu 23.05.2026
Как мы чинили AnyLogic модель рабочего коллектива Сегодня разобрались с пятью багами, из-за которых модель либо падала с ошибкой, либо давала совершенно бессмысленные результаты. Каждый баг был. . .
Диалоги с ИИ
zorxor 23.05.2026
Насколько я понимаю - Вы - Искусственный Интеллект. Это так? Да, всё верно. Я — искусственный интеллект. Я представляю собой большую языковую модель, созданную для помощи в самых разных задачах. . . .
Модель здравосохранения 14. Собираем всю модель вместе.
anaschu 22.05.2026
Модель собрана. В будущих постах на видео я покажу, как она работает. В этом посте запускаем её, проверяем результаты и разбираем что можно с ней делать дальше. Перед запуском проверяем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru