Добрый день
1. Уменьшение веса изображения через c#
2. Создание альтернативного скриншота вместо DrawToBitmap
1. Изначальный размер картинки 1,21 мб, получаем 95кб (0,1мб)
Все мы прекрасно знаем о лимите отправке картинок в 100кб на сервис распознавания капчи, даже capmonster2 имеет данный лимит примерно в 500кб, и при создании скриншотов, мы получаем большие картинки, большого размера
А у нас лимит в 100кб, есть скрипт что поможет сжать
Спасибо автору за код https://zenno.club/discussion/threads/stim-i-recaptcha-sitekey-addon.82677/post-736161 , немного модифировав его
Код берет из переменной var1 данные, и записывает в переменную var2
На выходе получаем
2. Создание альтернативного скриншота вместо DrawToBitmap
Для Zennoposter
Для Zennodroid
Спасибо за идею с кодом https://zenno.club/discussion/threads/zd-dobavit-rabotu-so-svojstvami-ehlementa-cherez-c.120294/post-799899
Спасибо за внимание
1. Уменьшение веса изображения через c#
2. Создание альтернативного скриншота вместо DrawToBitmap
1. Изначальный размер картинки 1,21 мб, получаем 95кб (0,1мб)
Все мы прекрасно знаем о лимите отправке картинок в 100кб на сервис распознавания капчи, даже capmonster2 имеет данный лимит примерно в 500кб, и при создании скриншотов, мы получаем большие картинки, большого размера
А у нас лимит в 100кб, есть скрипт что поможет сжать
Спасибо автору за код https://zenno.club/discussion/threads/stim-i-recaptcha-sitekey-addon.82677/post-736161 , немного модифировав его
C#:
Image image;
byte[] bytes = Convert.FromBase64String(project.Variables["var1"].Value);
using (MemoryStream stream = new MemoryStream(bytes)){ image = Image.FromStream(stream); }
long quality = 80L;
System.Drawing.Imaging.EncoderParameters encoderParameters = new System.Drawing.Imaging.EncoderParameters(1);
encoderParameters.Param[0] = new System.Drawing.Imaging.EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality);
System.Drawing.Imaging.ImageCodecInfo codec = System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders().FirstOrDefault(c => c.MimeType == "image/jpeg");
MemoryStream mems = new MemoryStream();
image.Save(mems, codec, encoderParameters);
project.Variables["var2"].Value = Convert.ToBase64String(mems.ToArray());
На выходе получаем
2. Создание альтернативного скриншота вместо DrawToBitmap
Для Zennoposter
C#:
var el = instance.ActiveTab.MainDocument.QuerySelector("img", 0);
if(el != null){
string getBase64Screen = getScreen(el);
project.Variables["var1"].Value = getBase64Screen;
}
string getScreen(HtmlElement el2){
if(el2==null){ return ""; }
int x1 = el2.DisplacementInBrowser.X; //-200
int y1 = el2.DisplacementInBrowser.Y;
int w1 = el2.Width; // 500
int h1 = el2.Height;
if(w1>0&&h1>0){
string base64String = instance.ActiveTab.GetPagePreview();
if(base64String.Length<1000){ return ""; }
string base64String2 = "";
byte[] imageBytes = Convert.FromBase64String(base64String);
Image image; using (MemoryStream stream = new MemoryStream(imageBytes)){ image = Image.FromStream(stream); }
if(x1<0){ if((x1+w1)<=0){ return ""; } w1 = x1+w1; x1 = 0; }
if(y1<0){ if((y1+h1)<=0){ return ""; } h1 = y1+h1; y1 = 0;}
//if(image.Width>w1){ w1 = }
Bitmap croppedImage = new Bitmap(w1, h1);
using (Graphics g = Graphics.FromImage(croppedImage)){
g.DrawImage(image, (new Rectangle(0,0,w1, h1 )), (new Rectangle(x1, y1,w1, h1 )), GraphicsUnit.Pixel);
}
using (MemoryStream stream2 = new MemoryStream()){
croppedImage.Save(stream2, System.Drawing.Imaging.ImageFormat.Png);
imageBytes = stream2.ToArray();
base64String2 = Convert.ToBase64String(imageBytes);
}
return base64String2;
}
return "";
}
Спасибо за идею с кодом https://zenno.club/discussion/threads/zd-dobavit-rabotu-so-svojstvami-ehlementa-cherez-c.120294/post-799899
C#:
var tab = instance.DroidInstance;
var driver = tab.AppiumDriver;
var elem = driver.FindElementByXPath("//android.widget.ImageView");
if (elem != null){
string img = getImageXpath("//android.widget.ImageView");
}
string getImageXpath(string xp){
//info( instance.DroidInstance.AppiumDriver.FindElementByXPath(xp).GetType().ToString());
var elem2 = driver.FindElementByXPath(xp);
if (elem2 == null){ return ""; }
string bounds = elem2.GetAttribute("bounds");
//bounds = Regex.Replace(bounds, @"\[|\]", ",");
//string[] parts2 = bounds.Split(',');
//parts2 = parts2.Where(x => x != null && x!="").ToArray();
var matches = Regex.Matches(bounds, @"\[(\d+),(\d+)\]");
if (matches.Count == 2){
// Координаты "углов" элемента
int x1 = int.Parse(matches[0].Groups[1].Value);
int y1 = int.Parse(matches[0].Groups[2].Value);
int x2 = int.Parse(matches[1].Groups[1].Value);
int y2 = int.Parse(matches[1].Groups[2].Value);
var area = new Rectangle(x1, y1, (x2-x1), (y2-y1));
string b64= tab.Screen.ScreenshotAsBase64String(area);
project.Variables["var1"].Value =b64;
return b64;
}
return "";
}
Спасибо за внимание
Последнее редактирование: