PDA

View Full Version : سوال: دانلود تصویر از صفحه ای که Vector smash protection is enabled



shahab.es
شنبه 27 آذر 1395, 12:51 عصر
سلام و عرض ادب خدمت همه ی اساتید
ولادت پیامبر رو تبریک میگم
دوستان من میخوام از یک صفحه که وکتور اسمش پراتکشن رو فعال کرده ، تصویر رو بیارم توی پیکچر باکس
اما متاسفانه لود نمیشه
میخواستم ببینم راهی سراغ دارید برای این قضیه
ممنونم
من url اون تصویر رو میدم به pictureBox اما لودش نمیکنه و توی لاگ این ارور رو مینویسه
برای مثال url این تصویر رو ، که توی کروم بدون هیچ مشکلی نمایش داده میشه
http://www.prozhe.com/wordpress/wp-content/uploads/2014/06/1298150627.jpg



Vector smash protection is enabled.Exception thrown: 'System.ArgumentException' in System.Drawing.dll
Exception thrown: 'System.ArgumentException' in System.Windows.Forms.dll
Exception thrown: 'System.Reflection.TargetInvocationException' in mscorlib.dll
Exception thrown: 'System.ArgumentOutOfRangeException' in System.Windows.Forms.dll
The thread 0x2144 has exited with code 0 (0x0).
ممنون میشم کمک کنید
♥♥

Mahmoud.Afrad
دوشنبه 29 آذر 1395, 04:56 صبح
این لینکی که قرار دادید برای من توی مرورگر باز نشد.


توضیحی مختصر همراه کد قرار بدید؛ و اینکه، لینک رو از کجا بدست آوردید؟

alireza_s_84
دوشنبه 29 آذر 1395, 06:27 صبح
سلام و عرض ادب خدمت همه ی اساتید
ولادت پیامبر رو تبریک میگم
دوستان من میخوام از یک صفحه که وکتور اسمش پراتکشن رو فعال کرده ، تصویر رو بیارم توی پیکچر باکس
اما متاسفانه لود نمیشه
میخواستم ببینم راهی سراغ دارید برای این قضیه
ممنونم
من url اون تصویر رو میدم به pictureBox اما لودش نمیکنه و توی لاگ این ارور رو مینویسه
برای مثال url این تصویر رو ، که توی کروم بدون هیچ مشکلی نمایش داده میشه
http://www.prozhe.com/wordpress/wp-content/uploads/2014/06/1298150627.jpg



ممنون میشم کمک کنید
♥♥
این خطا هنگامی رخ میده که کنترل به هر دلیلی نتونه عکس رو پردازش و نمایش بده. من فکر میکنم کدهایی که عکس رو دریافت میکنن مشکل دارن و چیزی غیر عکس دریافت میشه. کدهایی که برای دریافت عکس نوشتین رو قرار بدین تا بهتر بشه نظر داد.

shahab.es
سه شنبه 30 آذر 1395, 18:58 عصر
ممنونم از همه ی عزیزان ♥
ببینید، من با گت المنت، میام و لینک تصویر مربوط به یک پست رو ، میگیرم، این کار هیچ مشکلی نداره چون توی کنسول لاگ گرفتم و لینک رو دریافت کردم
بعد هم لینک رو به کنترل picture box میدم،
این سایت، به نحوی محافظت میکنه از تصاویر ، چون با کتابخونه glide اندروید هم نتونستم بگیرم تصویر رو
این روش برای جاوا موجود بود طبق سرچ بنده
http://stackoverflow.com/a/36189442

http://prozhe.com
شما این سایت رو در نظر بگیرید
یکی از پست هارو باز کنید و سورسش رو ببینید


بنده این صفحه رو با web browser لود میکنم و میام از طریق get element اون قسمت هایی که مورد نیازم هست رو دریافت میکنم
همونطور که خدمتتون عرض کردم، روش دریافت کاملا درسته و لینک رو توی لاگ دریافت کردم بدون مشکل
بنده طبق این خط کد، اومدم و اون تگ ایمیج مد نظرم رو گرفتم و مقدار موجود توی src رو دادم به picture box
این خطی که کامنت شده ، کارش همینه که عرض کردم


for (int i = 0; i < webBrowser1.Document.GetElementsByTagName("img").Count; i++)
{
if (webBrowser1.Document.GetElementsByTagName("img")[i].GetAttribute("className") == "attachment- size- wp-post-image")
{
//pictureBox1.Load(webBrowser1.Document.GetElementsB yTagName("img")[i].GetAttribute("src"));
String[] filename = webBrowser1.Document.GetElementsByTagName("img")[i].GetAttribute("src").Split('/');
imgname_lbl.Text = filename[filename.Length - 1].Substring(0, filename[filename.Length - 1].Length - 4);
}
}


ممنونتون میشم که راهنمایی کنید اگر چیزی به ذهنتون رسید
یلداتون هم مبارک باشه اساتید عزیزم ♥

alireza_s_84
چهارشنبه 08 دی 1395, 09:45 صبح
دوستان 10 روزی میشه که این تاپیک بازه
اگر براتون ممکنه ، یه بررسی بفرمایید و اساتید اگر روشی در نظر دارن، دریغ نکنن
ممنونم
مقدار این قسمت رو با گذاشتن Break Point چک کنید:

webBrowser1.Document.GetElementsB yTagName("img")[i].GetAttribute("src")

باید به شما یک آدرس مطلق بده نه نسبی یعنی آدرسی که با http شروع میشه

shahab.es
جمعه 10 دی 1395, 16:07 عصر
ممنونم که پاسخ دادید هموطن
من ازش لاگ گرفتم، به این شکل شد


http://www.prozhe.com/wordpress/wp-content/uploads/2014/06/12234215453.jpg
http://www.prozhe.com/wordpress/wp-content/uploads/2014/06/12234215453.jpg
Exception thrown: 'System.ArgumentOutOfRangeException' in System.Windows.Forms.dllVector smash protection is enabled.http://www.prozhe.com/wordpress/wp-content/uploads/2014/06/12234215453.jpg
Exception thrown: 'System.ArgumentOutOfRangeException' in System.Windows.Forms.dll

alireza_s_84
جمعه 10 دی 1395, 17:07 عصر
ممنونم که پاسخ دادید هموطن
من ازش لاگ گرفتم، به این شکل شد


http://www.prozhe.com/wordpress/wp-content/uploads/2014/06/12234215453.jpg
http://www.prozhe.com/wordpress/wp-content/uploads/2014/06/12234215453.jpg
Exception thrown: 'System.ArgumentOutOfRangeException' in System.Windows.Forms.dllVector smash protection is enabled.http://www.prozhe.com/wordpress/wp-content/uploads/2014/06/12234215453.jpg
Exception thrown: 'System.ArgumentOutOfRangeException' in System.Windows.Forms.dll

به جای نمایش مستقیم عکس به شکل زیر عمل کنید:
با استفاده از WebClient به آدرس عکس درخواست بدین و حتما هدر Referrer رو به دامنه اصلی سایت مقداردهی کنید و نتیجه برگشتی رو به صورت استریم بخونید و بریزید توی MemortyStream بعد اون رو به PictureBox برای نمایش بدین

shahab.es
شنبه 11 دی 1395, 00:37 صبح
ممنونم هموطن، خیلی مرسی که پاسخ دادید
من هدف اصلیم اینه که تصویر رو نمایش بدم و بعد ذخیره اش کنم...
تا اینجا رو طبق فرمایش شما رفتم اما بقیه اش رو تا حالا کار نکردم، ممنونتون میشم اگر مرحمت کنید و راهنمایی کنید



String picAdress = webBrowser1.Document.GetElementsByTagName("img")[i].GetAttribute("src");
var getAddress = new WebClient { Encoding = System.Text.Encoding.UTF8 };
getAddress.Headers[HttpRequestHeader.Referer] = "http://www.prozhe.com/";
var result = getAddress.UploadString(picAdress,"");

alireza_s_84
شنبه 11 دی 1395, 07:10 صبح
ممنونم هموطن، خیلی مرسی که پاسخ دادید
من هدف اصلیم اینه که تصویر رو نمایش بدم و بعد ذخیره اش کنم...
تا اینجا رو طبق فرمایش شما رفتم اما بقیه اش رو تا حالا کار نکردم، ممنونتون میشم اگر مرحمت کنید و راهنمایی کنید





String picAdress = webBrowser1.Document.GetElementsByTagName("img")[i].GetAttribute("src");
var getAddress = new WebClient { Encoding = System.Text.Encoding.UTF8 };
getAddress.Headers[HttpRequestHeader.Referer] = "http://www.prozhe.com/";
var result = getAddress.UploadString(picAdress,"");


از فایل ضمیمه کمک بگیرید

shahab.es
شنبه 11 دی 1395, 14:57 عصر
بی نهایت عالی بود هموطن
ممنونم از کمکتون، نتیجه هم داد
فقط یک سوال دیگه دارم،من برای ذخیره ی تصویری که ریختیم توی پیکچر باکس، از کد زیر استفاده کردم، اما تصویرم کاملا مشکی هست و ارور زیر هم توی لاگ دریافت میکنم


System.Runtime.InteropServices.ExternalException (0x80004005): A generic error occurred in GDI+.




if (Directory.Exists("Images"))
{
pictureBox1.Image.Save(@"Images\" + imgname_lbl.Text + ".jpg", ImageFormat.Jpeg);
}
else
{
Directory.CreateDirectory("Images");
pictureBox1.Image.Save(@"Images\" + imgname_lbl.Text + ".jpg", ImageFormat.Jpeg);
}

توی لیبل هم اسم تصویر بدون پسوند ذخیره شده، مشکل از اسم تصویر نیست چون دقیقا فایل رو با اسم مورد نظرم ایجاد میکنه، اما ذخیره ی تصویر انجام نمیشه و تصویر هم مشکیه
ممنون میشم اگر براتون ممکنه و وقتش رو دارید، یه راهنمایی بفرمایید

alireza_s_84
شنبه 11 دی 1395, 16:35 عصر
بی نهایت عالی بود هموطن
ممنونم از کمکتون، نتیجه هم داد
فقط یک سوال دیگه دارم،من برای ذخیره ی تصویری که ریختیم توی پیکچر باکس، از کد زیر استفاده کردم، اما تصویرم کاملا مشکی هست و ارور زیر هم توی لاگ دریافت میکنم


System.Runtime.InteropServices.ExternalException (0x80004005): A generic error occurred in GDI+.




if (Directory.Exists("Images"))
{
pictureBox1.Image.Save(@"Images\" + imgname_lbl.Text + ".jpg", ImageFormat.Jpeg);
}
else
{
Directory.CreateDirectory("Images");
pictureBox1.Image.Save(@"Images\" + imgname_lbl.Text + ".jpg", ImageFormat.Jpeg);
}

توی لیبل هم اسم تصویر بدون پسوند ذخیره شده، مشکل از اسم تصویر نیست چون دقیقا فایل رو با اسم مورد نظرم ایجاد میکنه، اما ذخیره ی تصویر انجام نمیشه و تصویر هم مشکیه
ممنون میشم اگر براتون ممکنه و وقتش رو دارید، یه راهنمایی بفرمایید
این خطا بیشتر بخاطر مسیر نادرست رخ میده. فایل ضمیمه رو بررسی کنید:

shahab.es
شنبه 11 دی 1395, 19:23 عصر
خیلی خیلی ممنونم ازتون
تاپیک به نتیجه رسید
من کاری که انجام دادم این بود که یه memoryStream رو به شکل global تعریف کردم، موقع لود ، عکس رو درونش بافر کردم و یه بار نمایشش دادم توی پیکچر باکس و یه بار هم با کلیک روی دکمه، ذخیره اش کردم
تمامش هم با کمک شما میسر شد علیرضا جان
به این شکل درومد کدها در اخر
گرفتن تصویر و نمایش در picture box

using (var sr = getAddress.OpenRead(picAdress))
{
imageStream = new MemoryStream();
var buffer = new Byte[1024];
var myCounter = 0;
do
{
myCounter = sr.Read(buffer, 0, buffer.Length);
imageStream.Write(buffer, 0, myCounter);
} while (myCounter > 0);
try
{
pictureBox1.Image = Image.FromStream(imageStream);

}
catch (Exception)
{
}
}


ذخیره در دایرکتوری

var directory = $"{AppDomain.CurrentDomain.BaseDirectory}Templaet Images";
if (!Directory.Exists(directory))
Directory.CreateDirectory(directory);
var filePath = $@"{directory}\{imgname_lbl.Text}.jpg";
var img = Image.FromStream(imageStream);
img.Save(filePath);
imageStream.Close();


با تشکر از شما علیرضا جان
با این خطم خیلی حال کردم، ندیده بودم تا الان

$"{AppDomain.CurrentDomain.BaseDirectory}Images"
یا علی ♥♥♥