Fid*_*del 5 c# selenium download selenium-chromedriver
我正在使用Selenium和谷歌Chrome驱动程序以编程方式打开页面.在每个页面上都有一个动态生成的图像,我想下载它.目前,我正在等待页面完成加载,然后我抓取图像URL并使用System.Net.WebClient下载它.
这工作正常,除了我下载图像两次 - 一次在浏览器中,一次使用WebClient.问题是每个图像大约是15MB,下载两次很快就会增加.
那么 - 是否可以直接从谷歌浏览器中获取图像?
meh*_*cek 12
一种方法是使用webdriver执行的javascript获取图像的base64字符串.然后,您可以将图像的base64string保存到文件.
基本上,如果你的形象是
<img id='Img1' src='someurl'>
Run Code Online (Sandbox Code Playgroud)
然后你就可以转换它了
var base64string = driver.ExecuteScript(@"
var c = document.createElement('canvas');
var ctx = c.getContext('2d');
var img = document.getElementById('Img1');
c.height=img.naturalHeight;
c.width=img.naturalWidth;
ctx.drawImage(img, 0, 0,img.naturalWidth, img.naturalHeight);
var base64String = c.toDataURL();
return base64String;
") as string;
var base64 = base64string.Split(',').Last();
using (var stream = new MemoryStream(Convert.FromBase64String(base64)))
{
using (var bitmap = new Bitmap(stream))
{
var filepath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "ImageName.png");
bitmap.Save(filepath, ImageFormat.Png);
}
}
Run Code Online (Sandbox Code Playgroud)
是的,您可以通过几个步骤执行此操作:
示例代码 - 请添加您的代码以捕获异常
IWebDriver driver = new ChromeDriver();
//replace with the page you want to navigate to
string your_page = "https://www.google.com";
driver.Navigate().GoToUrl(your_page);
ITakesScreenshot ssdriver = driver as ITakesScreenshot;
Screenshot screenshot = ssdriver.GetScreenshot();
Screenshot tempImage = screenshot;
tempImage.SaveAsFile(@"C:\full.png", ImageFormat.Png);
//replace with the XPath of the image element
IWebElement my_image = driver.FindElement(By.XPath("//*[@id=\"hplogo\"]/canvas[1]"));
Point point = my_image.Location;
int width = my_image.Size.Width;
int height = my_image.Size.Height;
Rectangle section = new Rectangle(point, new Size(width, height));
Bitmap source = new Bitmap(@"C:\full.png");
Bitmap final_image = CropImage(source, section);
final_image.Save(@"C:\image.jpg");
Run Code Online (Sandbox Code Playgroud)
CropImage方法由James Hill发布, 如何在C#中剪切图像的一部分
但为了清楚起见,我也会在这里添加它
public Bitmap CropImage(Bitmap source, Rectangle section)
{
Bitmap bmp = new Bitmap(section.Width, section.Height);
Graphics g = Graphics.FromImage(bmp);
g.DrawImage(source, 0, 0, section, GraphicsUnit.Pixel);
return bmp;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13383 次 |
| 最近记录: |