Капча улетает при скрине

SlipDez

Client
Регистрация
18.07.2018
Сообщения
374
Благодарностей
70
Баллы
28
Пытаюсь сделать скриншот canvas Hcaptcha, но она мастерски уворачивается, как ее поймать? Частенько это происходит на Enterprise на других более редкое явление. Скриншот пытаюсь сделать через ZennoPoster.ImageProcessingCropFromScreenshot
110906


110904
110905
 

ex3maL

Client
Регистрация
22.05.2020
Сообщения
359
Благодарностей
267
Баллы
63

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 442
Благодарностей
1 287
Баллы
113
Пытаюсь сделать скриншот canvas Hcaptcha, но она мастерски уворачивается, как ее поймать? Частенько это происходит на Enterprise на других более редкое явление. Скриншот пытаюсь сделать через ZennoPoster.ImageProcessingCropFromScreenshot
Посмотреть вложение 110906

Посмотреть вложение 110904Посмотреть вложение 110905
Это такая специфика зенно, особенно на хромиум... Вот поставил сегодня тестовую 7.7.6.0, вроде бы помогло. Попробуйте и вы.
 

SlipDez

Client
Регистрация
18.07.2018
Сообщения
374
Благодарностей
70
Баллы
28
ex3maL

Неоднократно пробовал сбивается еще чаще + часто отрисовывает только пустой фон (черный)
 

SlipDez

Client
Регистрация
18.07.2018
Сообщения
374
Благодарностей
70
Баллы
28
Gunjubasik

К сожалению не могу, подписка на обновления закончилась, жду 8
110911
 

Dr.Pipetka

Client
Регистрация
12.12.2017
Сообщения
1 230
Благодарностей
802
Баллы
113

SlipDez

Client
Регистрация
18.07.2018
Сообщения
374
Благодарностей
70
Баллы
28

SlipDez

Client
Регистрация
18.07.2018
Сообщения
374
Благодарностей
70
Баллы
28
У меня уже 2 закончились пока жду:-)
Говорят что скоро должна быть, но судя по тому что этим занимается другая команда возможно надо будет дополнительно шекели отстегивать)
 

SlipDez

Client
Регистрация
18.07.2018
Сообщения
374
Благодарностей
70
Баллы
28
Решено
Спустя столько потраченного времени наконец-то понял в чем дело! на cef отрабатывает отлично, а вот на chronium иногда не хочет. Все дело в масштабе, привычка его менять. Как только масштаб становится отличный от 100% все летит через 5 точку canvas до улетает дальше то не долетает.

Решение:

Для получения изображения
Для получения изображения в файловой системе:
HtmlElement he = instance.ActiveTab.FindElementByXPath("//canvas",0);
if (he.IsVoid) throw new Exception("canvas не найден.");
var bitmap  = he.DrawAsBitmap(false);

try
{
    bitmap.Save(@"C:\test.png", System.Drawing.Imaging.ImageFormat.Png);
}
catch (Exception e)
{
    throw new Exception("Ошибка при сохранении Bitmap в файл", e);
}
finally
{
    bitmap.Dispose();
}
Для получения base64
Для получения изображения в base64:
HtmlElement he = instance.ActiveTab.FindElementByXPath("//canvas",0);
if (he.IsVoid) throw new Exception("canvas не найден.");
string k   = he.DrawToBitmap(false);
project.Variables["resultBase64"].Value  =k;
Для установки дефолт значения после игр
C#:
Tab tab = instance.ActiveTab;
tab.PageScale = 100; // Значение в процентах, 50 = 50%
Ну и canvas можно при желании отрисовать по новой тогда изображение уменьшится в размере если сервис не захочет принимать из за размера

Dr.Pipetka
ex3maL
Gunjubasik
 

ex3maL

Client
Регистрация
22.05.2020
Сообщения
359
Благодарностей
267
Баллы
63
Решено
Спустя столько потраченного времени наконец-то понял в чем дело! на cef отрабатывает отлично, а вот на chronium иногда не хочет. Все дело в масштабе, привычка его менять. Как только масштаб становится отличный от 100% все летит через 5 точку canvas до улетает дальше то не долетает.

Решение:

Для получения изображения
Для получения изображения в файловой системе:
HtmlElement he = instance.ActiveTab.FindElementByXPath("//canvas",0);
if (he.IsVoid) throw new Exception("canvas не найден.");
var bitmap  = he.DrawAsBitmap(false);

try
{
    bitmap.Save(@"C:\test.png", System.Drawing.Imaging.ImageFormat.Png);
}
catch (Exception e)
{
    throw new Exception("Ошибка при сохранении Bitmap в файл", e);
}
finally
{
    bitmap.Dispose();
}
Для получения base64
Для получения изображения в base64:
HtmlElement he = instance.ActiveTab.FindElementByXPath("//canvas",0);
if (he.IsVoid) throw new Exception("canvas не найден.");
string k   = he.DrawToBitmap(false);
project.Variables["resultBase64"].Value  =k;
Для установки дефолт значения после игр
C#:
Tab tab = instance.ActiveTab;
tab.PageScale = 100; // Значение в процентах, 50 = 50%
Ну и canvas можно при желании отрисовать по новой тогда изображение уменьшится в размере если сервис не захочет принимать из за размера

Dr.Pipetka
ex3maL
Gunjubasik
А еще игра со стилями дает результ как у меня на гифке
Position absolute
Меняем на fixed
А потом скриним участок
В элементе канвас если что)
 

SlipDez

Client
Регистрация
18.07.2018
Сообщения
374
Благодарностей
70
Баллы
28
А еще игра со стилями дает результ как у меня на гифке
Position absolute
Меняем на fixed
А потом скриним участок
В элементе канвас если что)
Честно говоря для меня это уже рулетка какая-то проверил на zennolab captcha = работает, проверил на nopecha работает. Начал проверять Discord и все полетело, уже не отрабатывает. С чем это связано не понятно. Сначала понял что там ни 1 canvas пробовал получать только те которые во frame в конечном итоге решил сделать проверку на размер картинки, если она слишком маленькая то пытаюсь скринить 3 раза с задержкой 500 мс (потому что изображение отрисовывается на холсте ассинхронно) если все также выхожу по красной ветке и другой вариант использую. При масштабе 100% тот способ который использовал ранее отрабатывает практически всегда.

PS Для Hcaptcha режу верхнюю часть а то утки прокликиваются по тестовым изображениям, мб понадобится вот код для обрезки


C#:
string outputImagePath = "C://90.jpg"; // Изменили имя переменной и путь для сохранения без этого выбивает ошибку
string path = project.Directory + @"\56.jpg";

int cropHeight = 120;

using (Bitmap originalImage = new Bitmap(path))
{
    int newHeight = originalImage.Height - cropHeight;
    Rectangle cropRectangle = new Rectangle(0, cropHeight, originalImage.Width, newHeight);

    using (Bitmap croppedImage = new Bitmap(cropRectangle.Width, cropRectangle.Height))
    {
        using (Graphics graphics = Graphics.FromImage(croppedImage))
        {
            graphics.DrawImage(originalImage, new Rectangle(0, 0, croppedImage.Width, croppedImage.Height), cropRectangle, GraphicsUnit.Pixel);
            croppedImage.Save(outputImagePath, System.Drawing.Imaging.ImageFormat.Jpeg);
        }
    }
}
            byte[] fileBytes = File.ReadAllBytes(outputImagePath);

        string base64 = Convert.ToBase64String(fileBytes);
                    project.Variables["img0"].Value= base64;
                return "ok";
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)