如何使用Selenium下载指定URL原图?解决截图存为全屏问题
解决Selenium ChromeDriver截图图片实际尺寸的问题
嘿,我懂你现在的困扰——用Selenium打开图片URL后,GetScreenshot()截出来的是整个浏览器窗口的图,根本不是图片本身的真实尺寸对吧?别着急,咱们有两种靠谱的方法来搞定这个事儿:
方法一:直接截取图片元素的截图(推荐)
Selenium的IWebElement对象本身就支持截图功能,咱们可以直接定位到页面里的图片元素,然后只截取这个元素的区域,这样得到的就是图片的实际尺寸啦。
完整VB.NET代码示例:
Imports OpenQA.Selenium Imports OpenQA.Selenium.Chrome Imports OpenQA.Selenium.Support.UI ' 初始化ChromeDriver相关配置 Dim service As ChromeDriverService = ChromeDriverService.CreateDefaultService() Dim opt As ChromeOptions = New ChromeOptions() ' 可选:添加一些浏览器参数优化体验,比如禁用不必要的弹窗 opt.AddArgument("--disable-popup-blocking") Dim pub As New ChromeDriver(service, opt) pub.Navigate.GoToUrl("https://cdn01.muaban.net/mogi/thumb-detail/201810/01/951/5c055e8b0f88442a81ac5dfadc235e97.jpg") ' 等待图片元素加载完成(避免还没加载完就操作) Dim wait As New WebDriverWait(pub, TimeSpan.FromSeconds(10)) Dim imgElement As IWebElement = wait.Until(ExpectedConditions.ElementIsVisible(By.TagName("img"))) ' 直接截取图片元素的截图,这就是图片的真实尺寸 Dim imgScreenshot As Screenshot = imgElement.GetScreenshot() imgScreenshot.SaveAsFile("image.jpg") ' 记得关闭浏览器释放资源 pub.Quit()
方法二:调整浏览器窗口为图片尺寸后截图
如果你的Selenium版本不支持元素截图(不过现在大部分新版本都支持了),可以先获取图片的实际宽高,然后把浏览器窗口调整到对应尺寸,再进行全屏截图。
代码示例:
Imports OpenQA.Selenium Imports OpenQA.Selenium.Chrome Imports OpenQA.Selenium.Support.UI Imports System.Drawing Dim service As ChromeDriverService = ChromeDriverService.CreateDefaultService() Dim opt As ChromeOptions = New ChromeOptions() Dim pub As New ChromeDriver(service, opt) pub.Navigate.GoToUrl("https://cdn01.muaban.net/mogi/thumb-detail/201810/01/951/5c055e8b0f88442a81ac5dfadc235e97.jpg") ' 等待图片加载并获取元素 Dim wait As New WebDriverWait(pub, TimeSpan.FromSeconds(10)) Dim imgElement As IWebElement = wait.Until(ExpectedConditions.ElementIsVisible(By.TagName("img"))) ' 获取图片的实际宽高 Dim imgWidth As Integer = imgElement.Size.Width Dim imgHeight As Integer = imgElement.Size.Height ' 调整浏览器窗口大小为图片尺寸(可以加个小偏移,避免窗口边框截断图片) pub.Manage().Window.Size = New Size(imgWidth + 10, imgHeight + 10) ' 现在截图就是图片的实际尺寸了 pub.GetScreenshot().SaveAsFile("image.jpg") pub.Quit()
注意事项:
- 一定要加等待逻辑:图片加载需要时间,直接操作可能会获取到错误的尺寸或者空元素,用
WebDriverWait来等待元素可见是很有必要的。 - 如果遇到图片加载慢的情况,可以适当延长等待时间(比如把10秒改成15秒)。
内容的提问来源于stack exchange,提问作者jeon
相关产品推荐
相关产品推荐

