【问题标题】:How can I programmatically create a screen shot of a given Web site?如何以编程方式创建给定网站的屏幕截图?
【发布时间】:2025-11-28 20:10:02
【问题描述】:

我希望能够创建给定网站的屏幕截图,但该网站可能比屏幕上显示的要大。有什么办法可以做到吗?

目标是在 WinForms 应用程序中使用 C# 中的 .NET 实现此目的。

【问题讨论】:

  • 有人想将其作为服务器端脚本,但我需要一个 WinForms 应用程序。

标签: screenshot image-capture


【解决方案1】:

有一些工具。

问题是,您需要在某个给定的程序中渲染它,并拍摄它的快照。 我不了解 .NET,但这里有一些工具可供参考。

【讨论】:

    【解决方案2】:

    我刚刚发现了网站 browsershots.org,它可以为一大堆不同的浏览器生成屏幕截图。在某种程度上,您甚至可以指定分辨率。

    【讨论】:

      【解决方案3】:

      我在 VB.NET 中编写了一个程序,可以按照您的要求完成,除了屏幕尺寸问题。

      我在表单中嵌入了一个 Web 控件(查看所有控件的最底部),并调整了它的设置(隐藏滚动)。我使用计时器等待动态内容,然后使用“copyFromScreen”获取图像。

      我的程序有动态尺寸(可通过命令行设置)。我发现如果我的程序比屏幕大,图像只会返回屏幕外区域的黑色像素。因为那时我的工作已经完成,所以我没有进一步研究。

      希望能给你一个好的开始。对不起,任何错误的措辞。我每隔几个月才登录一次 Windows 开发。

      【讨论】:

        【解决方案4】:

        将 at 作为屏幕截图可能会变得丑陋。使用 wget 捕获页面的全部内容很容易,但是图像意味着捕获渲染。

        这是some tools,声称要这样做。

        【讨论】:

          【解决方案5】:

          您可以在 WebBrowser 控件上呈现它,然后拍摄快照,如果页面尺寸大于屏幕尺寸,您必须滚动控件拍摄一张或多张快照,然后合并所有图片:)

          【讨论】:

            【解决方案6】:

            这是以编程方式创建屏幕截图的代码:

            using System.Drawing.Imaging; int screenWidth = Screen.GetBounds(new Point(0, 0)).Width; int screenHeight = Screen.GetBounds(new Point(0, 0)).Height; Bitmap bmpScreenShot = new Bitmap(screenWidth, screenHeight); Graphics gfx = Graphics.FromImage((Image)bmpScreenShot); gfx.CopyFromScreen(0, 0, 0, 0, new Size(screenWidth, screenHeight)); bmpScreenShot.Save("test.jpg", ImageFormat.Jpeg);

            【讨论】:

            • -1 这是用户桌面的屏幕截图,而不是网站的屏幕截图
            【解决方案7】:

            网站的 Java 屏幕截图

            Combine Screens 一起为最终的整个网页截图。

            public static void main(String[] args) throws FileNotFoundException, IOException {
                    System.setProperty("webdriver.chrome.driver", "D:\\chromedriver.exe");
                    ChromeDriver browser = new ChromeDriver();  
                    WebDriver driver = browser;
                    driver.get("https://news.google.co.in/");
                    driver.manage().timeouts().implicitlyWait(500, TimeUnit.SECONDS);
            
                    JavascriptExecutor jse = (JavascriptExecutor) driver;
                    Long clientHeight = (Long) jse.executeScript("return document.documentElement.clientHeight");
                    Long scrollHeight = (Long) jse.executeScript("return document.documentElement.scrollHeight");
                    int screens = 0, xAxis = 0, yAxis = clientHeight.intValue();
                    String screenNames = "D:\\Screenshots\\Yash";
                    for (screens = 0; ; screens++) {
                        if (scrollHeight.intValue() - xAxis < clientHeight) {
                            File crop = new File(screenNames + screens+".jpg");
                            FileUtils.copyFile(browser.getScreenshotAs(OutputType.FILE), crop);                 
            
                            BufferedImage image = ImageIO.read(new FileInputStream(crop));            
                            int y_Axixs = scrollHeight.intValue() - xAxis;
                            BufferedImage croppedImage = image.getSubimage(0, image.getHeight()-y_Axixs, image.getWidth(), y_Axixs);
                            ImageIO.write(croppedImage, "jpg", crop);               
                            break;
                        }               
            
            FileUtils.copyFile(browser.getScreenshotAs(OutputType.FILE), new File(screenNames + screens+".jpg")); 
             jse.executeScript("window.scrollBy("+ xAxis +", "+yAxis+")");
            
                            jse.executeScript("var elems = window.document.getElementsByTagName('*');"                              
                                    + "     for(i = 0; i < elems.length; i++) { "
                                    + "         var elemStyle = window.getComputedStyle(elems[i], null);"
                                    + "         if(elemStyle.getPropertyValue('position') == 'fixed' && elems[i].innerHTML.length != 0 ){"                                                                  
                                    + "             elems[i].parentNode.removeChild(elems[i]); "                                
                                    + "}}");    // Sticky Content Removes
                            xAxis += yAxis;
                    }
                    driver.quit();
                }
            

            【讨论】: