From 4f394e39256b7f8bae99098ef3389d93dd2cfab6 Mon Sep 17 00:00:00 2001 From: Simon Rieger Date: Sat, 21 Sep 2024 21:03:48 +0200 Subject: [PATCH] First Commit --- README.md | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ go.mod | 13 +++++++++ go.sum | 15 +++++++++++ scraper.go | 43 ++++++++++++++++++++++++++++++ 4 files changed, 148 insertions(+) create mode 100644 README.md create mode 100755 go.mod create mode 100755 go.sum create mode 100644 scraper.go diff --git a/README.md b/README.md new file mode 100644 index 0000000..0c909c0 --- /dev/null +++ b/README.md @@ -0,0 +1,77 @@ +# iFrame Link Extractor + +## Beschreibung + +Dieses Go-Programm verwendet die go-rod Bibliothek, um den Inhalt von verschachtelten iFrames auf einer Webseite zu extrahieren und alle darin enthaltenen HTTPS-Links zu identifizieren und auszugeben. Es ist besonders nützlich für Webseiten mit komplexen iFrame-Strukturen, bei denen der Zugriff auf den Inhalt tiefer verschachtelter iFrames erforderlich ist. + +## Funktionen + +- Navigiert zu einer angegebenen URL +- Wartet auf das Laden der Hauptseite +- Findet und wechselt in den Kontext eines äußeren iFrames +- Findet und wechselt in den Kontext eines inneren iFrames innerhalb des äußeren iFrames +- Extrahiert den Textinhalt des inneren iFrames +- Identifiziert alle HTTPS-Links im extrahierten Text +- Gibt die gefundenen Links aus + +## Voraussetzungen + +- Go 1.16 oder höher +- go-rod Bibliothek + +## Installation + +1. Stellen Sie sicher, dass Go auf Ihrem System installiert ist. + +2. Klonen Sie das Repository: + ``` + git clone https://github.com/yourusername/iframe-link-extractor.git + cd iframe-link-extractor + ``` + +3. Installieren Sie die erforderlichen Abhängigkeiten: + ``` + go mod tidy + ``` + +## Verwendung + +1. Öffnen Sie die `main.go` Datei und passen Sie die URL und iFrame-Selektoren an Ihre Zielwebseite an. + +2. Führen Sie das Programm aus: + ``` + go run main.go + ``` + +3. Das Programm wird die gefundenen HTTPS-Links in der Konsole ausgeben. + +## Anpassung + +- Um auf spezifische Elemente innerhalb der iFrames zu warten, können Sie zusätzliche `MustElement().MustWaitVisible()` Aufrufe hinzufügen. +- Der reguläre Ausdruck für die Link-Erkennung kann angepasst werden, um spezifischere URL-Muster zu erfassen. + +## Fehlerbehebung + +- Wenn Sie Probleme mit Timeouts haben, erhöhen Sie die Wartezeiten mit `page.Timeout()` oder `MustElement().WaitVisible()`. +- Bei Problemen mit dem Zugriff auf iFrames aufgrund von Sicherheitseinstellungen, erwägen Sie die Verwendung zusätzlicher Browser-Optionen wie im Kommentar im Code beschrieben. + +## Beitrag + +Beiträge zum Projekt sind willkommen. Bitte öffnen Sie ein Issue oder einen Pull Request für Vorschläge oder Verbesserungen. + +## Lizenz + +[Fügen Sie hier Ihre gewählte Lizenz ein, z.B. MIT, GPL, etc.] +``` + +Diese README.md bietet eine umfassende Übersicht über Ihr Projekt und enthält Abschnitte für: + +1. Eine kurze Beschreibung des Projekts +2. Die Hauptfunktionen +3. Voraussetzungen für die Nutzung +4. Installationsanweisungen +5. Verwendungshinweise +6. Anpassungsmöglichkeiten +7. Tipps zur Fehlerbehebung +8. Informationen zum Beitragen zum Projekt +9. Einen Platzhalter für die Lizenz diff --git a/go.mod b/go.mod new file mode 100755 index 0000000..852a58a --- /dev/null +++ b/go.mod @@ -0,0 +1,13 @@ +module scraper-go + +go 1.19 + +require github.com/go-rod/rod v0.116.2 + +require ( + github.com/ysmood/fetchup v0.2.3 // indirect + github.com/ysmood/goob v0.4.0 // indirect + github.com/ysmood/got v0.40.0 // indirect + github.com/ysmood/gson v0.7.3 // indirect + github.com/ysmood/leakless v0.9.0 // indirect +) diff --git a/go.sum b/go.sum new file mode 100755 index 0000000..09e669a --- /dev/null +++ b/go.sum @@ -0,0 +1,15 @@ +github.com/go-rod/rod v0.116.2 h1:A5t2Ky2A+5eD/ZJQr1EfsQSe5rms5Xof/qj296e+ZqA= +github.com/go-rod/rod v0.116.2/go.mod h1:H+CMO9SCNc2TJ2WfrG+pKhITz57uGNYU43qYHh438Mg= +github.com/ysmood/fetchup v0.2.3 h1:ulX+SonA0Vma5zUFXtv52Kzip/xe7aj4vqT5AJwQ+ZQ= +github.com/ysmood/fetchup v0.2.3/go.mod h1:xhibcRKziSvol0H1/pj33dnKrYyI2ebIvz5cOOkYGns= +github.com/ysmood/goob v0.4.0 h1:HsxXhyLBeGzWXnqVKtmT9qM7EuVs/XOgkX7T6r1o1AQ= +github.com/ysmood/goob v0.4.0/go.mod h1:u6yx7ZhS4Exf2MwciFr6nIM8knHQIE22lFpWHnfql18= +github.com/ysmood/gop v0.2.0 h1:+tFrG0TWPxT6p9ZaZs+VY+opCvHU8/3Fk6BaNv6kqKg= +github.com/ysmood/got v0.40.0 h1:ZQk1B55zIvS7zflRrkGfPDrPG3d7+JOza1ZkNxcc74Q= +github.com/ysmood/got v0.40.0/go.mod h1:W7DdpuX6skL3NszLmAsC5hT7JAhuLZhByVzHTq874Qg= +github.com/ysmood/gotrace v0.6.0 h1:SyI1d4jclswLhg7SWTL6os3L1WOKeNn/ZtzVQF8QmdY= +github.com/ysmood/gotrace v0.6.0/go.mod h1:TzhIG7nHDry5//eYZDYcTzuJLYQIkykJzCRIo4/dzQM= +github.com/ysmood/gson v0.7.3 h1:QFkWbTH8MxyUTKPkVWAENJhxqdBa4lYTQWqZCiLG6kE= +github.com/ysmood/gson v0.7.3/go.mod h1:3Kzs5zDl21g5F/BlLTNcuAGAYLKt2lV5G8D1zF3RNmg= +github.com/ysmood/leakless v0.9.0 h1:qxCG5VirSBvmi3uynXFkcnLMzkphdh3xx5FtrORwDCU= +github.com/ysmood/leakless v0.9.0/go.mod h1:R8iAXPRaG97QJwqxs74RdwzcRHT1SWCGTNqY8q0JvMQ= diff --git a/scraper.go b/scraper.go new file mode 100644 index 0000000..b2ec94a --- /dev/null +++ b/scraper.go @@ -0,0 +1,43 @@ +package main + +import ( + "fmt" + "regexp" + "github.com/go-rod/rod" +) + +func main() { + browser := rod.New().MustConnect() + defer browser.MustClose() + + page := browser.MustPage("https://pad.stratum0.org/p/dc") // URL der Hauptseite + page.MustWaitLoad() + + // Finden Sie das erste iFrame-Element + outerIframeElement := page.MustElement("#editorcontainer > iframe:nth-child(1)") // Passen Sie den Selektor an + + // Wechseln Sie zum Kontext des ersten iFrames + outerFrame := outerIframeElement.MustFrame() + + // Warten Sie, bis der Inhalt des ersten iFrames geladen ist + outerFrame.MustWaitLoad() + + // Finden Sie das zweite iFrame-Element innerhalb des ersten iFrames + innerIframeElement := outerFrame.MustElement("#outerdocbody > iframe:nth-child(1)") // Passen Sie den Selektor an + + // Wechseln Sie zum Kontext des zweiten iFrames + innerFrame := innerIframeElement.MustFrame() + innerFrame.MustWaitLoad() + + // Extrahieren Sie den Text aus dem zweiten iFrame (Benutze statt #innderdocbody auch body für jedes Element) + text := innerFrame.MustElement("#innerdocbody").MustText() + + // Regex zum Finden von Links, die mit https beginnen + re := regexp.MustCompile(`https://[\w\.-]+(?:/[\w\.-]*)*`) + httpsLinks := re.FindAllString(text, -1) + + fmt.Println("Gefundene https-Links:") + for _, link := range httpsLinks { + fmt.Println(link) + } +}