Пытаюсь сделать скриншот canvas Hcaptcha, но она мастерски уворачивается, как ее поймать? Частенько это происходит на Enterprise на других более редкое явление. Скриншот пытаюсь сделать через ZennoPoster.ImageProcessingCropFromScreenshot
Это такая специфика зенно, особенно на хромиум... Вот поставил сегодня тестовую 7.7.6.0, вроде бы помогло. Попробуйте и вы.Пытаюсь сделать скриншот canvas Hcaptcha, но она мастерски уворачивается, как ее поймать? Частенько это происходит на Enterprise на других более редкое явление. Скриншот пытаюсь сделать через ZennoPoster.ImageProcessingCropFromScreenshot
Посмотреть вложение 110906
Посмотреть вложение 110904Посмотреть вложение 110905
У меня уже 2 закончились пока ждуК сожалению не могу, подписка на обновления закончилась, жду 8
Не сложно будет пример скинуть как скрин делается? А то я уже дошел до того, что сделал расширение для обхода CORS чтобы выкачать это грязный canvas
Говорят что скоро должна быть, но судя по тому что этим занимается другая команда возможно надо будет дополнительно шекели отстегивать)У меня уже 2 закончились пока жду
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();
}
HtmlElement he = instance.ActiveTab.FindElementByXPath("//canvas",0);
if (he.IsVoid) throw new Exception("canvas не найден.");
string k = he.DrawToBitmap(false);
project.Variables["resultBase64"].Value =k;
Tab tab = instance.ActiveTab;
tab.PageScale = 100; // Значение в процентах, 50 = 50%
А еще игра со стилями дает результ как у меня на гифкеРешено
Спустя столько потраченного времени наконец-то понял в чем дело! на cef отрабатывает отлично, а вот на chronium иногда не хочет. Все дело в масштабе, привычка его менять. Как только масштаб становится отличный от 100% все летит через 5 точку canvas до улетает дальше то не долетает.
Решение:
Для получения изображения
Для получения base64Для получения изображения в файловой системе: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:HtmlElement he = instance.ActiveTab.FindElementByXPath("//canvas",0); if (he.IsVoid) throw new Exception("canvas не найден."); string k = he.DrawToBitmap(false); project.Variables["resultBase64"].Value =k;
Ну и canvas можно при желании отрисовать по новой тогда изображение уменьшится в размере если сервис не захочет принимать из за размераC#:Tab tab = instance.ActiveTab; tab.PageScale = 100; // Значение в процентах, 50 = 50%
Dr.Pipetka
ex3maL
Gunjubasik
Честно говоря для меня это уже рулетка какая-то проверил на zennolab captcha = работает, проверил на nopecha работает. Начал проверять Discord и все полетело, уже не отрабатывает. С чем это связано не понятно. Сначала понял что там ни 1 canvas пробовал получать только те которые во frame в конечном итоге решил сделать проверку на размер картинки, если она слишком маленькая то пытаюсь скринить 3 раза с задержкой 500 мс (потому что изображение отрисовывается на холсте ассинхронно) если все также выхожу по красной ветке и другой вариант использую. При масштабе 100% тот способ который использовал ранее отрабатывает практически всегда.А еще игра со стилями дает результ как у меня на гифке
Position absolute
Меняем на fixed
А потом скриним участок
В элементе канвас если что)
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";