№1 по видеообучению программированию в России! Более 32 000 учеников! Вы с нами?
Меню
- Главная
- Продукты
- Как стать профессиональным программистом?
- Форум здравомыслящих программистов
- RSS лента
- Работы наших учеников
- Личный блог Артёма Кашеварова
- Об авторах
Рубрики
- Видеоуроки от пользователей
- Заработок для программиста
- Личная жизнь
- Поржать
- Работы наших учеников
- Разное
- Разработка игр
- Рассылки
- Сайтостроение
- Уроки для начинающих
- Уроки по C++
- Уроки по Delphi
- Уроки по Java
- Уроки по PHP
- Уроки по WinAPI
- Уроки по разработке для Android
- Уроки по С#
Моя книга
Рекомендую:
Получите видеокурс по программированию для начинающих прямо сейчас:
Python Selenium #7 Headless mode | Работа браузера в фоновом режиме
Самое интересное:
- Форум здравомыслящих программистов
- C# POST и GET запросы на сервер
- С чего начать изучение программирования?
- Об авторах
- Пре-релиз моей книги!
- Современный 3D экшн весом в 96 КБ Krieger
- Что делать если все хреново?
- Клиентское и серверное приложение с использованием сокетов на C++
- Win API для начинающих
- Создаем приложение на Android за 10 мин
Заработать
на этом сайте
Как зарабатывать продавая информацию
Программное Web-страницами из вашей программы
Март 29, 2011
Доброго времени суток, дамы и господа!
Сегодняшний видеокаст обладают поистине БОЛЬШИМ потенциалом. Мы с вами будем учиться программно и без нашего вмешательства управлять браузером!
Возможности перед нами действительно появляются безграничные.
Смотрим видео:
Смотреть видео
Правда существует парочка проблем которые возникают при управлении таким способом:
Во-первых мы не можем распознать и заполнить капчу на сайтах, хотя эта проблема решаема. Есть много сервисов в которых люди отгадывают капчу, требуется только соединить сервис с вашей программой. Правда такое решение — платное. Но есть и специальные разгадывальшики капч, исходники которых можно найти в интернете. Для средне качественной капчи они подойдут.
То есть эта проблема как я уже писал — решаема.
Вторая проблема — это flash технологии которые помещаются на странице. В данном случае единственное что я могу вам посоветовать — возможность кликать мышью по определённым координатам, если требуется определять цвет пикселя прямо под указателем. Мы можем сами это делать при помощи самописных программ на delphi, управлять и кликать мышкой вовсе не трудно.
В результате мы можем получить ОООчень мощного бота для ваших проектов. Искренне надеюсь что вы будете его использовать во благо. =)
Управляется вашей организацией / Этим браузером управляет ваша организация в Google Chrome (РЕШЕНИЕ)
С Вами был Артём Кашеваров. До скорых встреч!
P.S. Оставьте комментарий плиз, мне очень интересно знать что вы думаете об этом. Видео вам помогло? На какие мысли натолкнуло?
Источник: programmerinfo.ru
Selenium WebDriver
для начинающих
Selenium – это проект, в рамках которого разрабатывается серия программных продуктов с открытым исходным кодом, предназначенных для автоматизации действий веб-браузера.
- Selenium — это не один продукт, а их совокупность.
- Selenium относится к open source продуктам.
- Selenium предназначен для работы с веб-браузером. В большинстве случаев используется для тестирования Web-приложений, но этим не ограничивается.
- Selenium WebDriver . Программная библиотека для управления браузерами. Эта библиотека используется для отправки HTTP запросов драйверу, в которых указано действие, которое должен совершить браузер в рамках текущей сессии. Примерами таких команд могут быть команды нахождения элементов по локатору, переход по ссылкам, парсинг текста страницы/элемента, нажатие кнопок или переход по ссылкам на странице веб-сайта. Основной продукт, разрабатываемый в рамках проекта Selenium . Подробнее будет рассмотрен ниже.
- Selenium RC . Предыдущая версия библиотеки для управления браузерами. Сейчас она находится в законсервированном состоянии, не развивается и даже известные баги не исправляются. А всем, кто сталкивается с ограничениями Selenium RC , предлагается переходить на использование WebDriver. Иногда Selenium RC называется также Selenium 1.0 , тогда как WebDriver называется Selenium 3.0 . С технической точки зрения WebDriver не является результатом эволюционного развития Selenium RC , они построены на совершенно разных принципах и у них практически нет общего кода. Объединяет их лишь тот факт, что обе реализации были сделаны в рамках проекта Selenium .
- Selenium Server . Сервер, который позволяет управлять браузером с удалённой машины, по сети. Сначала на той машине, где должен работать браузер, устанавливается и запускается сервер. Затем на другой машине запускается программа, которая, используя специальный драйвер RemoteWebDriver , соединяется с сервером и отправляет ему команды. Он в свою очередь запускает браузер и выполняет в нём эти команды, используя драйвер, соответствующий этому браузеру.
- Selenium Grid . Кластер, состоящий из нескольких Selenium-серверов . Он предназначен для организации распределённой сети, позволяющей параллельно запускать много браузеров на большом количестве машин. Selenium Grid имеет топологию «звезда», то есть в его составе имеется выделенный сервер, который носит название хаб или коммутатор , а остальные сервера называются ноды или узлы . Сейчас физически продукт один – Selenium Server , но у него есть несколько режимов запуска: он может работать как самостоятельный сервер, как коммутатор кластера, либо как узел кластера, что определяется параметрами запуска.
- Selenium IDE . Плагин к браузерам Firefox и Google Chrome, который может записывать действия пользователя, воспроизводить их, а также генерировать код для WebDriver или Selenium RC , в котором выполняются те же самые действия. Другими словами, это Selenium-рекордер .
3. Selenium WebDriver
Selenium WebDriver — это семейство драйверов для различных браузеров, а также набор клиентских библиотек на разных языках, позволяющих работать с этими драйверами.
Проект Selenium
В рамках проекта Selenium разрабатываются драйверы для браузеров Firefox, Internet Explorer и Safari, а также драйверы для мобильных браузеров Android и iOS. Драйвер для браузера Google Chrome разрабатывается в рамках проекта Chromium, а драйвер для браузера Opera (включая мобильные версии) разрабатывается компанией Opera Software.
Поэтому они формально не являются частью проекта Selenium , распространяются и поддерживаются независимо. Но логически, конечно, можно считать их частью семейства продуктов Selenium. Аналогичная ситуация и с клиентскими библиотеками – в рамках проекта Selenium разрабатываются библиотеки для языков Java, .Net (C#), Python, Ruby, JavaScript. Все остальные реализации не имеют отношения к проекту Selenium, хотя, возможно, в будущем, какие-то из них могут влиться в этот проект.
- спецификацию программного интерфейса для управления браузером,
- референсные реализации этого интерфейса для нескольких браузеров,
- набор клиентских библиотек для этого интерфейса на нескольких языках программирования.
- Структурирование, группировку и запуск тестов, а также генерацию отчётов о тестировании, обеспечивает фреймворк тестирования, такой как JUnit или TestNG для Java, NUnit или Gallio для .Net, RSpec или Cucumber для Ruby и так далее.
- Разработка тестов ведётся в среде Eclipse , Intellij IDEA , Visual Studio , RubyMine и так далее.
- Сборка осуществляется посредством Maven , Gradle , Ant , NAnt , Rake и так далее.
- Запуск тестов по расписанию и публикацию отчётов выполняет сервер непрерывной интеграции – Jenkins , CruiseControl , Bamboo , TeamCity и так далее.
- драйвер браузера, то есть библиотека достаточно низкого уровня абстракции,
- стандарт на интерфейс управления браузером, то есть минимальный набор команд, который должен быть реализован в каждом браузере.
Но зато благодаря этой примитивности интерфейса сейчас для интерфейса WebDriver имеются реализации клиентских библиотек на Java, C#, Ruby, Python, JavaScript, PHP, Perl. И благодаря той же самой простоте WebDriver прекрасно интегрируется с любыми другими инструментами, встраивается в любой стек. В этом секрет его популярности и быстрого распространения – он не пытается «победить» другие инструменты, вместо этого он интегрируется с ними.
Задачу же удобства использования должны решать расширения, построенные на базе Selenium WebDriver . Именно они должны предоставлять расширенный набор команд, реализуя эти команды через примитивный интерфейс WebDriver. В дистрибутиве Selenium имеется класс Select , предназначенный для работы с выпадающими списками, который является наглядной демонстрацией того, как должны строиться расширения.
Постепенно появляются библиотеки, которые строятся на базе Selenium WebDriver и предоставляют более высокий уровень абстракции: Selenide , fluent-selenium , watir-webdriver , Thucidides . Популярные фреймворки для проектирования тестов позволяют наряду с другими драйверами использовать WebDriver. Среди таких фреймворков можно упомянуть Robot Framework , Capybara и тот же Thucidides . Число таких расширений и инструментов будет расти, сложность тоже. Так что вскоре может так случиться, что вы, используя какой-то инструмент, будете выполнять тесты, даже не подозревая о том, что взаимодействие с браузером осуществляется через драйвер Selenium WebDriver .
- Браузер, работу которого пользователь хочет автоматизировать. Это реальный браузер определенной версии, установленный на определенной ОС и имеющий свои настройки (по умолчанию или кастомные).
- Для управления браузером совершенно необходим driver браузера. Driver на самом деле является веб-сервером, который запускает браузер и отправляет ему команды, а также закрывает его. У каждого браузера свой driver. Связано это с тем, что у каждого браузера свои отличные команды управления и реализованы они по-своему.
- Скрипт/тест, который содержит набор команд на определенном языке программирования для драйвера браузера. Такие скрипты используют SeleniumWebdriver bindings (готовые библиотеки), которые доступны пользователям на различных языках.
4. Selenium WebDriver API
Selenium WebDriver (он же Selenium 3.0 ) содержит множество замечательных возможностей и улучшений по сравнению с Selenium RC (он же Selenium 1.0 ). Самое главное изменение новой версии — это интеграция WebDriver API , альтернативного, упрощенного программного интерфейса, который избавлен от недостатков, характерных для Selenium RC . Цель создания WebDriver API — разработать объектно-ориентированный API, поддерживающий большее количество браузеров и лучше решающий проблемы тестирования современных веб-приложений. WebDriver API в свою очередь не привязан ни к каким тестовым фреймворкам, что позволяет использовать любые фреймворки модульного тестирования.
- Webdriver — самая важная сущность, ответственная за управление браузером. Основной ход скрипта/теста строится именно вокруг экземпляра этой сущности.
- Webelement — вторая важная сущность, представляющая собой абстракцию над веб элементом (кнопки, ссылки, поля ввода и др.). Webelement инкапсулирует методы для взаимодействия пользователя с элементами и получения их текущего статуса.
Нумерация;Действие;Синтаксис
1;Создать экземпляр WebDriver для конкретного браузера;Selenium::WebDriver.for :chrome 2;Перейти на страницу заданного сайта;driver.navigate.to «http://google.com» 3;Найти элемент на странице;driver.find_element(name: ‘q’) 4;Найти элемент на странице с заданной задержкой; wait = Selenium::WebDriver::Wait.new(timeout:30), wait.until < driver.find_element(id: «first») >5;Закрыть браузер;driver.quit
Что можно делать с WebElement ?
Нумерация;Действие;Синтаксис
1;Получить значение атрибута;element.attribute(«class») 2;Узнать, отображается ли элемент на странице;element.displayed? 3;Кликнуть по элементу;element.click 4;Получить расположение элемента на странице;element.location 5;Получить длину и ширину элемента;element.size 6;Нажать сочетание клавиш при выделенном элементе;element.send_keys :space 7;Получить текст элемента;element.text
- Создает драйвер для браузера Mozilla Firefox.
- Переходит на сайт Google.
- Ищет поле для ввода поискового запроса.
- Вводит тестовую фразу.
- Отправляет запрос.
- Закрывает браузер.
Пример, Ruby
driver = Selenium::WebDriver.for :firefox driver.navigate.to «http://google.com» element = driver.find_element(name: ‘q’) element.send_keys «Hello Google!» element.submit driver.quit
[ Web ] Урок 3. HTML: Структура страницы, DOM-дерево, применение тэгов
Типовая структура web-страницы, понятие DOM-дерева и работа браузера с ним. Содержание web-документа: доктайп, блок header, блок body. Классификация элементов HTML-сайта по задачам и областям применения.
[ Web ] Урок 2. HTML: Понятие, стандарты, тэги и атрибуты
Понятие языка разметки гипертекста. Современные HTML-стандарты: HTML4 / 5, XHTML. Элементы HTML и их разновидности, структура тегов. Основные атрибуты тегов, классификация.
5. Локаторы
Большая часть работы с Selenium WebDriver — это работа с веб-элементами ( WebElements ). WebElements — ни что иное, как DOM объекты, находящиеся на веб странице. А для того, чтобы осуществлять какие-то действия над DOM объектами, необходимо их точным образом определить(найти). Для поиска необходимых элементов страницы в Selenium WebDriver используются локаторы.
Локатор — это строка, уникально идентифицирующая UI -элемент. Когда вы делаете клик мышкой, ввод текста и прочие действия, вы эти действия выполняете над вполне конкретным объектом. Selenium поступает так же. Но поскольку он не умеет читать ваши мысли, то ему надо четко указать объект, для которого надо применить то или иное действие.
Пример поиска по локатору
driver.find_element(: )
Таким образом в Webdriver определяется нужный элемент. Рассмотрим основные типы локаторов:
1. Id .Соответствует элементу, у которого атрибут id равен заданному значению. Данный вид локаторов является одним из самых быстрых в нахождении и одним из самых уникальных. Это связано с тем, что в DOM-структуре ссылки на элементы, у которых задан ID, хранятся в отдельной таблице, и через JScript (собственно именно через него осуществляется доступ к элементам на конечном уровне) обращение к элементам по ID идет достаточно короткой инструкцией.
2. Name . Соответствует элементу, у которого атрибут name равен заданному значению. Эффективно применяется при работе с полями ввода формы: 1) кнопки, 2) текстовые поля, 3) выпадающие списки. Как правило, значения элементов формы используются в запросах, которые идут на сервер и как раз атрибут name в этих запросах ставит в соответствие поле и его значение. Данный тип локаторов тоже является достаточно быстрым в нахождении, но менее уникальным, так как на странице может быть несколько форм, у которых могут быть элементы с одинаковым именем.
3. Class . Соответствует элементу, у которого атрибут class равен заданному значению. Как правило, является еще менее уникальным, чем предыдущие локаторы.
4. Link . Специально для ссылок используется отдельно зарезервированный тип локаторов, который находит нужную ссылку по ее тексту. Это сделано отчасти потому, что ссылки как правило не имеют таких атрибутов как ID или name. У ссылки есть фиксированная часть и есть часть, которая может варьироваться. В этом случае можно использовать wildcards , в частности ‘*’ .
5. XPath . Наиболее универсальный тип локаторов. Как XPath формируется? HTML, как и его более обобщенная форма — XML, представляет собой различное сочетание тегов, которые могут содержать вложенные теги, а те в свою очередь тоже могут содержать теги и т.д. То есть, выстраивается определенная иерархия, наподобие структуры каталогов в файловой системе.
И задача XPath — отразить подобный путь к нужному элементу, с учетом иерархии. Например, XPath вида A/B/C/D указывает на некоторый элемент с тегом D, который находится внутри тега C, а тот в свою очередь — внутри тега B, который находится внутри тега A, который находится на самом верхнем уровне иерархии.
Если брать использование XPath в Selenium WebDriver , то там зачастую полный путь указывать не нужно, более того, вредно, особенно, если вложенность тега нужного элемента достаточно высока. Как правило, удобно указывать путь, начиная с некоторого промежуточного элемента, пропуская теги более высокого порядка.
У XPath есть много удобств, но есть и основной недостаток — низкая скорость нахождения объекта. В частности, с подобной проблемой можно столкнуться при работе с IE, так как при работе с XPath под IE используются JScript-библиотеки, которые не отличаются высокой скоростью выполнения. В таких случаях рекомендуется воспользоваться CSS-локаторами, но в некоторых случаях от XPath уйти не получится.
6. CSS . Данный тип локаторов основан на описаниях таблиц стилей (CSS), соответственно и синтаксис такой же. В отличие от локаторов по ID, по имени или по тексту ссылки, данный тип локаторов может учитывать иерархию объектов, а также значения атрибутов, что делает его ближайшим аналогом XPath. А в силу того, что объект находится по данному локатору быстрее, чем XPath, рекомендуется прибегать к помощи CSS вместо XPath. В CSS локаторе дочерний элемент отделяется символом ‘ >’ :
Источник: smartiqa.ru
Как можно взаимодействовать с сайтом через консольное приложение?
Допустим, имеется сайт на котором есть какое-то поле. В это поле нужно послать какое-то значение, нажать на кнопку, затем получить новую страницу, где перейти по первой ссылке. За этими мне нужно обращаться к классу WebBrowser? Если можно, то покажите пример(например, можно взять целевой сайт google, но без использования его API.)
Отслеживать
3,634 3 3 золотых знака 27 27 серебряных знаков 42 42 бронзовых знака
задан 22 дек 2016 в 17:00
24.7k 12 12 золотых знаков 62 62 серебряных знака 152 152 бронзовых знака
Нужно из приложения заполнять формы и переходить по ссылкам на страницах какого либо сайта?
22 дек 2016 в 17:09
22 дек 2016 в 17:10
Уверены что необходимо из своего приложения это делать? Например в Firefox есть несколько весьма мощных дополнений для решения подобных задач, например Greasemonkey и iMacros.
22 дек 2016 в 17:11
22 дек 2016 в 17:12
Гугли в сторону headless browsers
22 дек 2016 в 17:14
7 ответов 7
Сортировка: Сброс на вариант по умолчанию
Гуглим в консоле
Покажу на примере программы, которая позволяет гуглить прям в консоле (извлекает первые заглавные ссылки поиска на google.com):
Предварительные работы
Используйте CefSharp — библиотеку-оболочку, основанную на Chromium. Очень подробно её описал в этом ответе. Устанавливается просто через Nuget пакет.
Install-Package CefSharp.OffScreen -Version 57.0.0
Скопировав из приведенного мною ответа два класса ( CefSharpWrapper и ConvertHelper ), у вас уже готов скелет программы, с помощью которой вы можете исполнять любой JavaScript прямо из консольного приложения.
Также установите x64 или x86 в качестве платформы. Платформа Any CPU поддерживается, но требует дополнительного кода.
Дополнительные свойства и методы
Также для данной задачи добавьте в CefSharpWrapper свойство Address :
public string Address => _browser.Address;
и метод WaitTillAddressChanges :
public void WaitTillAddressChanges() < // wait till address changes AutoResetEvent waitHandle = new AutoResetEvent(false); EventHandleronAddressChanged = null; onAddressChanged = (sender, e) => < _browser.AddressChanged -= onAddressChanged; waitHandle.Set(); >; _browser.AddressChanged += onAddressChanged; waitHandle.WaitOne(); >
Пример самой программы
Вот пример самой программы (класс Program , метод Main ):
Результаты программы
К примеру, если я введу «parse html C#»:
AJAX
Отслеживать
ответ дан 29 дек 2016 в 22:24
Vadim Ovchinnikov Vadim Ovchinnikov
9,614 4 4 золотых знака 34 34 серебряных знака 71 71 бронзовый знак
Обновил программу. Добавил демонстрацию как можно гуглить прямо в консоле.
30 дек 2016 в 7:39
Кто минусует? Что не так?
30 дек 2016 в 21:12
Кто-то минусует, такое бывает, shit happens. Не беспокойтесь. 🙂
1 янв 2017 в 19:21
Если Вам надо закодить лишь какие-то определенные, известные части какого-то сайта — можно просто вытянуть нужные запросы, которые посылаются браузером (вычленить их можно в консоли разработчика браузера, обычно на вкладке Network) и посылать этот запрос в программе, например через HttpClient .
Если же изначально самих запросов Вы знать не можете (получать надо динамически в самой программе), то может 2 варианта событий:
- Если сайт может работать без использования ajax — парсить страничку на наличие тэга и отталкиваться от него. В нем есть атрибут action в котором содержится путь и атрибут encoded, который указывает формат кодировки (если нет — по умолчанию » application/x-www-form-urlencoded «, вроде бы, хотя точно лучше посмотреть через консоль разработчика). Все это собираете, в том числе и параметры внутри тэга , отправляете через HttpClient и получаете ответ
- Если сайт работает только через ajax — тут уже сложнее и другого выхода кроме как вручную смотреть через Network какие запросы формируются и жетско их кодить я не вижу
Но в большинстве случаев хватает и обычной отправки заранее подготовленных (вычлененных) запросов со своими параметрами.
Так же можно привязать к HttpClient ‘у HttpClientHandler для хранения кукисов и других плюшек.
Например Вам надо добавить пост на стену в вк определенное время — алгоритм будет такой:
- Создать HttpClient с привязанным к нему HttpClientHandler ‘ом
- Отправить через него POST запрос на нужный адрес (посмотреть можно на странице вк в исходниках или вычленяем через консоль разработчика) со своими логином и паролем в качестве значений. Этот запрос вернет ответ, но в данном случае он не нужен, просто ждем пока придет HttpResponseMessage , чтоб нам пришли куки
- Отправить еще один POST запрос, который добавит сообщение на стену
Отслеживать
ответ дан 27 дек 2016 в 16:00
1,214 1 1 золотой знак 8 8 серебряных знаков 16 16 бронзовых знаков
в вк есть встроенный таймер для отложенных постов
4 июн 2017 в 7:12
Очень хороший ответ. Стоит лишь добавить, что если сайты используют капчи вроде гугловской ReCapcha. то здесь без вариантов нужны движки браузеров.
29 июн 2018 в 17:30
Нашел интересную либу Selenium с помощью которой, через драйвера можно взаимодействовать с реальным браузером. Довольная простая в управлении:
using OpenQA.Selenium; using OpenQA.Selenium.Firefox; // Requires reference to WebDriver.Support.dll using OpenQA.Selenium.Support.UI; class GoogleSuggest < static void Main(string[] args) < // Create a new instance of the Firefox driver. // Note that it is wrapped in a using clause so that the browser is closed // and the webdriver is disposed (even in the face of exceptions). // Also note that the remainder of the code relies on the interface, // not the implementation. // Further note that other drivers (InternetExplorerDriver, // ChromeDriver, etc.) will require further configuration // before this example will work. See the wiki pages for the // individual drivers at http://code.google.com/p/selenium/wiki // for further information. using (IWebDriver driver = new FirefoxDriver()) < //Notice navigation is slightly different than the Java version //This is because ‘get’ is a keyword in C# driver.Navigate().GoToUrl(«http://www.google.com/»); // Find the text input element by its name IWebElement query = driver.FindElement(By.Name(«q»)); // Enter something to search for query.SendKeys(«Cheese»); // Now submit the form. WebDriver will find the form for us from the element query.Submit(); // Google’s search is rendered dynamically with JavaScript. // Wait for the page to load, timeout after 10 seconds var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); wait.Until(d =>d.Title.StartsWith(«cheese», StringComparison.OrdinalIgnoreCase)); // Should see: «Cheese — Google Search» (for an English locale) Console.WriteLine(«Page title is: » + driver.Title); > > >
Однако, все равно хотелось узнать, как можно сделать это стандартными средствами .NET.
Отслеживать
9,614 4 4 золотых знака 34 34 серебряных знака 71 71 бронзовый знак
ответ дан 22 дек 2016 в 18:24
24.7k 12 12 золотых знаков 62 62 серебряных знака 152 152 бронзовых знака
В стандартном .NET нет встроенного браузера, тем более способного выполнять JS. Любое решение подразумевает внешний браузер — IE в виде WebBrowser Control, или какой-то другой при использовании селениума. Если не хотите чтобы при этом браузер реально открывался и показывался на экране — возьмите selenium + phantomjs
– user177221
24 дек 2016 в 21:35
24 дек 2016 в 23:30
2 янв 2017 в 14:18
2 янв 2017 в 16:06
Все зависит от твоих потребностей и от сайта:
- Используется ли на сайте AJAX
- Есть ли там сложно-обходимые капчи вроде Re-Capcha
- На сколько сложная последовательность действий нужна
- На сколько важно быстродействие
- На сколько будет загруженной страница(это может быть просто страница, а может быть бесконечная прокрутка)
- Нужна ли кросплатформенность решения
- Используются ли какие-то хитрые технологии на сайтах вроде CORS
В принципе если обобщить всю информацию поданную НИЖЕ и привести к максимально универсальному ответу:
а. если нужно самое быстрое «одноразовое» решение и скорость работы не важна — значит Selenium
б. Если это задача по тестированию — Selenium
в. Если нужна универсальность решения и максимально простая поддержка на долгих периодах времени и не важно сколько займет кодинг:
- CefSharp для прохождения капчи/рекапчи (убрать пункт если таковой нет)
- вытянуть из CefSharp куки, всунуть их в дотнетовские куки
- а дальше взаимодействовать с сайтом через HttpWebRequest запросы
г. если нужно просто парсить данные — AngleSharp. Никаких htmlAgrilityPack.
Детальнее же про каждый из способов.
- Очень бедное управление. Сложный в работе.
- графический элемент, а значит будет жрать оперативу и работать медленно
- не работает с бесконечными страницами
- гипер кривая работа с JS. Некоторые сайты просто не отображаются. Устаревший инструмент.
+? в теории -кросплатформенный, но не уверен.
Прямая работа через HttpWebRequest Post/Get запросы с последующим парсингом. Нужную последовательность можно узнать в консоли разработчика браузера, на вкладке Network. Желательно использовать НЕ низкоуровневые запросы а какие-то библиотеки для REST запросов. Будет быстрее значительно код писаться.
- если на сайте AJAX — работать так может быть сложно.
- никак не пройти Re-Capcha. Может быть затруднительным прохождение капч в принципе.
- если сайт часто изменяется, реже будет ломаться код (фрондтенд менее стабилен чем бекенд, так что идеальное решение для взаимодействия с бекендом!)
- Самое высокое быстродействие. Вы можете хоть тысячи страниц в паралели проганять.
- Может работать с «бесконечными» страницами любого размера. [Хотя для этого нужно будет попотеть немного]
- прекрасная кросплатформенность кода
Selenium — в общем и целом он предназначен именно для автоматизированного тестирования веб-сайтов. В том числе и с аджакс-технологией. То есть он может делать практически все действия, которые могут делать в браузере люди: находиль элементы интерфейса сайта, посылать в них нажатия кнопок, скролить, делать скриншоты, проверять на видимость/доступность и т.д.
Т.к. указан C# тег, а так же было сказано про отсутствие лишних окон, нужно использовать связку: Selenium Web-Driver и PhantomJS. Фантом — это безюайный браузер на движке как у хрома. Он может все то же самое что и простой браузер, только не показывается визуально и не тратит ресурсы на отрисовку. Минуса
- Он не ООПшный и довольно кривой в использовании
- очень хреново работает с большими страницами
- очень медленный
- нужно использовать сторонние браузеры и в проэкт качать доп.библиотеки для поддержки нужного браузера
- Не умеет работать с внешними окнами. Например с системным окном аутентификации на сервер (с версии 3.4 умеет). Или с окнами Open/Save file (для этого есть костыли а так же я написал полууниверсальное решение: https://github.com/ukushu/DialogCapabilities )
- На нем вполне можно проходить ReCapcha. При помощи юзера, правда 🙂
- Можно пройти и без юзера, если ипользовать аудиокапчу + распознавание текста с аудио через googleAPI. Например, вот здесь есть реализация прохождения рекапчи ботом, но на питоне: https://github.com/eastee/rebreakcaptcha/blob/master/rebreakcaptcha.py
- Вполне может работать с AJAX. А если допилять костыли, то, даже, вполне неплохо работать.
- Работает с посделовательностями действий любой сложности. В том числе всякие драг енд дропы.
- Может запускатся на многих компьютерах в паралели
? понятия не имею по поводу кросплатформенности
Оболочки вокруг готового движка вроде Хромиума. За пример — CefSharp.
- хреново работает с большими/бесконечными страницами
- относительно медленный
- нужно качать несколько библиотек
- многий функционал доступный с коробки в селениуме нужно будет реализовывать самому через JS код.
- На нем вполне можно проходить ReCapcha. При помощи юзера, правда 🙂
- работает с AJAX
- Работает с посделовательностями действий любой сложности
- Умеет работать с внешними окнами. Например с системным окном аутентификации на сервер.
? понятия не имею по поводу кросплатформенности. Скорее всего есть
AngleSharp — прекрасная штука, но заточенная исключительно под парсинг. Со своими задачами справляется на ура.
Отслеживать
ответ дан 30 дек 2016 в 21:09
Andrew Stop_RU_war_in_UA Andrew Stop_RU_war_in_UA
18.9k 6 6 золотых знаков 32 32 серебряных знака 98 98 бронзовых знаков
Уточните каким образом происходит обработка введенного текста в поле на сайте? Сайт отправляет его GET/POST или обрабатывает иначе?
Приведу ход своих мыслей на примере googl’a и GET.. Зачем нам эмулировать действия пользователя на сайте если мы напрямую можем работать с отправлением запроса, получением результата и дальнейшим парсингом
Источник: ru.stackoverflow.com