First Commit

This commit is contained in:
Simon Rieger 2024-09-21 21:03:48 +02:00
commit 4f394e3925
4 changed files with 148 additions and 0 deletions

77
README.md Normal file
View file

@ -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

13
go.mod Executable file
View file

@ -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
)

15
go.sum Executable file
View file

@ -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=

43
scraper.go Normal file
View file

@ -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)
}
}