You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
1.9 KiB
Go
77 lines
1.9 KiB
Go
5 months ago
|
package main
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"log"
|
||
|
"os"
|
||
|
"time"
|
||
|
|
||
|
"github.com/tebeka/selenium"
|
||
|
"github.com/tebeka/selenium/firefox"
|
||
|
)
|
||
|
|
||
|
const (
|
||
|
seleniumPath = "/home/uzivatel/Desktop/scraper/selenium-server.jar" // Adjust this path
|
||
|
geckoDriverPath = "/home/uzivatel/Desktop/scraper/geckodriver" // Adjust this path
|
||
|
port = 5553
|
||
|
)
|
||
|
|
||
|
func screenshotwebpage(targetURL string, targetPort int) {
|
||
|
opts := []selenium.ServiceOption{
|
||
|
selenium.StartFrameBuffer(), // Start an X frame buffer for the browser to run in
|
||
|
selenium.GeckoDriver(geckoDriverPath), // Specify the path to GeckoDriver
|
||
|
}
|
||
|
|
||
|
// Start a Selenium WebDriver server instance
|
||
|
service, err := selenium.NewSeleniumService(seleniumPath, port, opts...)
|
||
|
if err != nil {
|
||
|
log.Fatalf("Error starting the Selenium server: %v", err)
|
||
|
}
|
||
|
defer service.Stop()
|
||
|
|
||
|
// Connect to the WebDriver instance running locally
|
||
|
caps := selenium.Capabilities{"browserName": "firefox"}
|
||
|
firefoxCaps := firefox.Capabilities{
|
||
|
Args: []string{"--ignore-certificate-errors"},
|
||
|
}
|
||
|
caps.AddFirefox(firefoxCaps)
|
||
|
|
||
|
wd, err := selenium.NewRemote(caps, fmt.Sprintf("http://localhost:%d/wd/hub", port))
|
||
|
if err != nil {
|
||
|
log.Fatalf("Error connecting to the WebDriver server: %v", err)
|
||
|
}
|
||
|
defer wd.Quit()
|
||
|
|
||
|
// Check if the port is 443 for HTTPS
|
||
|
protocol := "http"
|
||
|
if targetPort == 443 {
|
||
|
protocol = "https"
|
||
|
}
|
||
|
|
||
|
// Open the target URL
|
||
|
wd.Get(protocol + "://" + targetURL + "/")
|
||
|
|
||
|
time.Sleep(2 * time.Second)
|
||
|
alert, err := wd.AlertText()
|
||
|
_ = alert
|
||
|
if err == nil {
|
||
|
|
||
|
// Accept the alert
|
||
|
err = wd.AcceptAlert()
|
||
|
if err != nil {
|
||
|
log.Fatalf("Error accepting the alert: %v", err)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Take a screenshot
|
||
|
screenshot, err := wd.Screenshot()
|
||
|
if err != nil {
|
||
|
fmt.Println("Error taking screenshot: %v", err)
|
||
|
}
|
||
|
|
||
|
// Save the screenshot to a file
|
||
|
if err := os.WriteFile("/home/uzivatel/Desktop/scraper/screenshots/"+targetURL, screenshot, 0644); err != nil {
|
||
|
log.Fatalf("Error saving screenshot: %v", err)
|
||
|
}
|
||
|
}
|