将图片框图像设置为来自 PhantomJS 加载页面的图像
Set picturebox image to image from PhantomJS loaded page
目前的情况是我正在使用 PhantomJS 和 Selenium 来加载网页,因为主机网站在 cloudflare ddos 保护之后,所以我不能使用任何没有内置 javascript 的东西. 这已经运行了一段时间,但该网站最近一直在使用他们自己的 CDN 来传送这些图像,这在将 PictureBox.ImageLocation
设置为 src 时会导致问题。
如果有任何方法可以获取 <img>
标签 src,并将其转换为 bitmap
或 image
以便能够在我的图片框中直接使用来自 PhantomJS 的图像,那会很棒的。
感谢您的帮助。
和我情况相同的朋友们:
事实证明,为 PhantomJS 和 selenium 存储适当的缓存并不容易,所以我转向了另一种方法,最终成功了。
当 PhantomJS 访问您的被 JS 墙(例如 CloudFlare DDOS Protection)锁定的网站时,它很可能会存储一个带有各种身份验证令牌的 cookie,表明您的浏览器通过了测试。
起初,它对我不起作用,因为 CloudFlare 似乎还记录了哪个用户代理已为该令牌授权,任何不匹配都会丢弃使用的令牌。
我设法使用以下代码解决了这个问题:
private Image GetImage(string ImageLocation)
{
byte[] data = null;
using (CustomWebClient WC = new CustomWebClient())
{
WC.Headers.Add(System.Net.HttpRequestHeader.UserAgent, "Mozilla/5.0 (iPhone; CPU iPhone OS 10_0_1 like Mac OS X) AppleWebKit/601.1 (KHTML, like Gecko) CriOS/53.0.2785.109 Mobile/14A403 Safari/601.1.46");
WC.Headers.Add(System.Net.HttpRequestHeader.Cookie, "cf_clearance=" + PhantomObject.Manage().Cookies.GetCookieNamed("cf_clearance").Value);
data = WC.DownloadData(ImageLocation);
}
Bitmap MP = new Bitmap(new System.IO.MemoryStream(data));
data = null;
return MP;
}
在此代码中,PhantomObject
是我的 PhantomJS driver object,而 CustomWebClient
只是一个普通网站,针对我使用的网站进行了一些调整.
我基本上使用了与我的 PhantomJS driver 使用的相同的伪造用户代理,并在 headers CloudFlare 清除 cookie 中传递,并且从那里我的网络客户端能够成功访问网站数据并下载图像数据,然后我将其转换为位图并返回。
目前的情况是我正在使用 PhantomJS 和 Selenium 来加载网页,因为主机网站在 cloudflare ddos 保护之后,所以我不能使用任何没有内置 javascript 的东西. 这已经运行了一段时间,但该网站最近一直在使用他们自己的 CDN 来传送这些图像,这在将 PictureBox.ImageLocation
设置为 src 时会导致问题。
如果有任何方法可以获取 <img>
标签 src,并将其转换为 bitmap
或 image
以便能够在我的图片框中直接使用来自 PhantomJS 的图像,那会很棒的。
感谢您的帮助。
和我情况相同的朋友们:
事实证明,为 PhantomJS 和 selenium 存储适当的缓存并不容易,所以我转向了另一种方法,最终成功了。
当 PhantomJS 访问您的被 JS 墙(例如 CloudFlare DDOS Protection)锁定的网站时,它很可能会存储一个带有各种身份验证令牌的 cookie,表明您的浏览器通过了测试。
起初,它对我不起作用,因为 CloudFlare 似乎还记录了哪个用户代理已为该令牌授权,任何不匹配都会丢弃使用的令牌。
我设法使用以下代码解决了这个问题:
private Image GetImage(string ImageLocation)
{
byte[] data = null;
using (CustomWebClient WC = new CustomWebClient())
{
WC.Headers.Add(System.Net.HttpRequestHeader.UserAgent, "Mozilla/5.0 (iPhone; CPU iPhone OS 10_0_1 like Mac OS X) AppleWebKit/601.1 (KHTML, like Gecko) CriOS/53.0.2785.109 Mobile/14A403 Safari/601.1.46");
WC.Headers.Add(System.Net.HttpRequestHeader.Cookie, "cf_clearance=" + PhantomObject.Manage().Cookies.GetCookieNamed("cf_clearance").Value);
data = WC.DownloadData(ImageLocation);
}
Bitmap MP = new Bitmap(new System.IO.MemoryStream(data));
data = null;
return MP;
}
在此代码中,PhantomObject
是我的 PhantomJS driver object,而 CustomWebClient
只是一个普通网站,针对我使用的网站进行了一些调整.
我基本上使用了与我的 PhantomJS driver 使用的相同的伪造用户代理,并在 headers CloudFlare 清除 cookie 中传递,并且从那里我的网络客户端能够成功访问网站数据并下载图像数据,然后我将其转换为位图并返回。