How to Take Screenshot of a Website From Url Using Swift?

Hello Friends Today, through this tutorial, I will tell you How to Take Screenshot of a Website From Url Using Swift? In Swift, you can use the `WebKit` framework to load a website and capture its content as an image. Below is a basic example using `WKWebView` to load a website and capture a screenshot.

Create a Swift script (e.g., `screenshot.swift`) with the following content:

import Foundation
import WebKit

class ScreenshotDelegate: NSObject, WKNavigationDelegate {
var webView: WKWebView?
var outputFileName: String 

init(outputFileName: String) {
self.outputFileName = outputFileName
super.init() 

// Initialize WKWebView
let webConfiguration = WKWebViewConfiguration()
self.webView = WKWebView(frame: .zero, configuration: webConfiguration)
self.webView?.navigationDelegate = self
} 

func takeScreenshot(urlString: String) {
guard let url = URL(string: urlString) else {
print("Invalid URL")
return
} 

// Load the webpage
let request = URLRequest(url: url)

webView?.load(request) 
// Run the main loop until the navigation is complete

RunLoop.main.run()
} 

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
// Capture screenshot after the webpage has loaded
captureScreenshot()
} 

func captureScreenshot() {
guard let webView = webView else {
print("WebView not initialized")
return
}

// Get the content size of the webpage
let contentSize = webView.scrollView.contentSize 

// Create an image context with the size of the content
UIGraphicsBeginImageContextWithOptions(contentSize, false, 0) 

// Render the content into the image context
webView.scrollView.layer.render(in: UIGraphicsGetCurrentContext()!) 

// Get the screenshot as an image
let screenshot = UIGraphicsGetImageFromCurrentImageContext() 

// End the image context
UIGraphicsEndImageContext()

// Convert the image to PNG data
if let imageData = screenshot?.pngData() {

// Save the PNG data to a file
let outputPath = FileManager.default.currentDirectoryPath + "/" + outputFileName
do {
try imageData.write(to: URL(fileURLWithPath: outputPath))
print("Screenshot saved to: \(outputPath)")
} catch {
print("Error saving screenshot: \(error.localizedDescription)")
}
}

// Stop the main loop
CFRunLoopStop(CFRunLoopGetCurrent())
}
}

// Replace 'https://example.com' with the URL of the website you want to capture
let urlToCapture = "https://example.com"

// Replace 'screenshot.png' with the desired output file name
let outputFileName = "screenshot.png"

// Create the ScreenshotDelegate instance
let screenshotDelegate = ScreenshotDelegate(outputFileName: outputFileName)

// Take the screenshot
screenshotDelegate.takeScreenshot(urlString: urlToCapture)

Make sure to replace:

– `”https://example.com”` with the actual URL of the website you want to capture.
– `”screenshot.png”` with the desired output file name.

Save the script and run it using the Swift interpreter:

swift screenshot.swift

This script uses `WKWebView` to load a webpage and capture its content as an image. It saves the screenshot as a PNG file in the current working directory. Note that the script runs in a synchronous manner, and the main loop is used to wait for the webpage to finish loading before capturing the screenshot.