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

Можно ли использовать куки, чтобы потом не вводить капчу?

csharp
webdriver
Теги: #<Tag:0x00007f7b68cfabf8> #<Tag:0x00007f7b68cfa928>

(It Ot) #1

ИСПОЛЬЗУЕТСЯ: С#, WebDriver (при необходимости)

Хочу написать парсер, который будет скачивать информацию программно (без браузера).
Но у некоторых сайтов бывает навароченная капча.

Чтобы не возится с проходом капчи программно, можно ли реализовать следующий сценарий?

СЦЕНАРИЙ:
1. Заходим на сайт через браузер (либо штатным браузером C# или с использованием WebDriver );
2. Проходим капчу в ручную;
3. Копируем куки;
4. Далее программой начинаем парсить.
Запросы для парсинга отправляются с ранее сформированными куки.

ВОПРОС
1. Возможно ли реализовать данный сценарий?

PS
Только осваиваю, поэтому могут быть неточности в формулировке вопроса и терминологии.


(Сергей Блохин) #2

ИСПОЛЬЗУЕТСЯ: С#, WebDriver (при необходимости)
Хочу написать парсер, который будет скачивать информацию программно (без браузера).

Либо то, либо то.
WebDriver — это и есть, по сути, браузер.

Хочу написать парсер, который будет скачивать информацию программно

Речь про ваш сайт или про внешний?
Если про ваш, то попросите ваших программистов отключить CAPTCHA для тестов или сделать master пароль, который будет подходить под любую CAPTCHA.
Если про внешний — то CAPTCHA для того и используется, чтобы ограничить программный сбор данных с сайта.

В общем случае такой сценарий реализуется следующим образом.
cookie — это заголовок, который передаётся на сервер при каждом к нему обращении.
После авторизации на сайте сохраняете у себя значение заголовка cookie.
Для этого в консоли браузера вводите команду document.cookie.
В ответе вернётся строка. Запомните её.
Потом находите любую non-GMO или GMO библиотеку для работы с HTTP.
Я рекомендую Unirest.
Делаете запрос к серверу, подсовывая cookie в виде заголовка.

Приведу абстрактный пример на Ruby.

# encoding: utf-8

require 'net/http'

cookie = 'cookie string from document.cookie'

http = Net::HTTP.start 'example.com'
response = http.get '/page_after_login', {cookie: cookies}
source_html = response.body

Я C# не знаю, но что-то типа такого должно быть:

string cookie = "cookie string from document.cookie";

HttpResponse response = Unirest.get("http://example.com/page_after_login")
  .header("cookie", cookie);

string source_html = response.Raw;

(Crazyk2) #3

Не вдаваясь конкретно в Ваш кейс, отвечу на вопрос.
WebDriver’у можно подсунуть куки так

getWebDriver().manage().addCookie(new Cookie(name, value));

где webDriver
org.openqa.selenium.WebDriver
и куки
org.openqa.selenium.Cookie