将图片框图像设置为来自 PhantomJS 加载页面的图像

Set picturebox image to image from PhantomJS loaded page

目前的情况是我正在使用 PhantomJS 和 Selenium 来加载网页,因为主机网站在 cloudflare ddos​​ 保护之后,所以我不能使用任何没有内置 javascript 的东西. 这已经运行了一段时间,但该网站最近一直在使用他们自己的 CDN 来传送这些图像,这在将 PictureBox.ImageLocation 设置为 src 时会导致问题。

如果有任何方法可以获取 <img> 标签 src,并将其转换为 bitmapimage 以便能够在我的图片框中直接使用来自 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 中传递,并且从那里我的网络客户端能够成功访问网站数据并下载图像数据,然后我将其转换为位图并返回。