目前的情况是我正在使用PhantomJS和Selenium加载网页,因为主机网站支持cloudflare ddos保护,所以我不能使用任何没有内置javascript的东西。这一直运行良好有一段时间但网站最近一直在使用他们自己的CDN来传递这些图像,这会在将PictureBox.ImageLocation
设置为src时出现问题。
如果有任何方法可以获得<img>
代码src,并将其转换为bitmap
或image
,以便能够直接从我的图片框中的PhantomJS使用该图片,那就是太棒了。
感谢您的帮助。
答案 0 :(得分:0)
对于与我情况相同的人:
事实证明,为PhantomJS和selenium存储适当的缓存并不容易,所以我转向另一条路线,最终工作。
当PhantomJS访问锁定在JS墙后面的网站时(例如CloudFlare DDOS Protection),它很可能会存储一个带有auth令牌的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驱动程序对象,CustomWebClient
只是一个普通的网站,对我正在使用的网站进行了一些调整。
我基本上使用我的PhantomJS驱动程序使用的伪造用户代理,以及在CloudFlare清除cookie的标题中传递,从那里我的webclient能够成功访问网站数据并下载图像&#39 ; s数据,然后我转变为位图并返回。