Wie greife ich über Web Scraping auf dynamische HTML-Elemente zu?

王林
Freigeben: 2024-02-09 09:51:17
nach vorne
338 Leute haben es durchsucht

如何通过网页抓取访问动态 HTML 元素?

php-Editor Xiaoxin ist hier, um eine Methode für den Zugriff auf dynamische HTML-Elemente durch Web-Crawling vorzustellen. Beim Crawlen von Webseiten stoßen wir manchmal auf dynamisch generierte Inhalte, die erst beim Laden der Webseite direkt abgerufen werden können. Glücklicherweise gibt es Tools und Techniken, mit denen wir dieses Problem lösen können. In diesem Artikel wird eine PHP-basierte Methode vorgestellt, mit der dynamische HTML-Elemente einfach gecrawlt und darauf zugegriffen werden kann. Lass uns einen Blick darauf werfen!

Frageninhalt

Ich verwende Go-Rod zum Web-Scraping. Ich möchte auf Links im Feed zugreifen <a>. Um dies zu machen a 可见,我必须完成一个搜索器,它是一个 input ,具有下一个格式(没有 submit):

<form>
    <input> <!--this is the searcher-->
<form/>
Nach dem Login kopieren

Wenn ich also fertig bin, möchte ich auf Folgendes zugreifen a:

Bis hierher ist alles in Ordnung. Dies ist der Code, den ich zum Vervollständigen der Suche verwendet habe:

//page's url
page := rod.new().mustconnect().mustpage("https://www.sofascore.com/")

//acept cookies alert
page.mustelement("cookiesalertselector...").mustclick()

//completes the searcher
el := page.mustelement(`searcherselector...`)
el.mustinput("lionel messi")
Nach dem Login kopieren

Jetzt tritt das Problem auf, wenn ich auf das a klicken möchte, das nach Abschluss der Suche erscheint.

Ich habe Folgendes versucht:

diviwant := page.mustelement("aselector...")
diviwant.mustclick()
Nach dem Login kopieren

Und das:

diviwant := page.mustelement("aselector...").mustwaitvisible()
diviwant.mustclick()
Nach dem Login kopieren

Allerdings erhalte ich bei allen den gleichen Fehler:

panic: {-32000 node is detached from document }
goroutine 1 [running]:
github.com/go-rod/rod/lib/utils.glob..func2({0x100742dc0?,
0x140002bad50?})
/users/lucastomicbenitez/go/pkg/mod/github.com/go-rod/[email&#160;protected]/lib/utils/utils.go:65
+0x24 github.com/go-rod/rod.gene.func1({0x14000281ca0?, 0x1003a98b7?, 0x4?})
/users/lucastomicbenitez/go/pkg/mod/github.com/go-rod/[email&#160;protected]/must.go:36
+0x64 github.com/go-rod/rod.(*element).mustclick(0x14000289320)   /users/lucastomicbenitez/go/pkg/mod/github.com/go-rod/[email&#160;protected]/must.go:729
+0x9c main.main()     /users/lucastomicbenitez/development/golang/evolutionaryalgorithm/main/main.go:22
+0x9c exit status 2
Nach dem Login kopieren

Auf der Suche nach Lösungen bin ich auf dieses Github-Problem gestoßen und habe versucht, den Link über diese Methode zu erhalten:

link := page.musteval(`()=> document.queryselector('aselector...').href`)
Nach dem Login kopieren

Aber es gibt Folgendes zurück:

panic: eval js error: TypeError: Cannot read properties of null
(reading 'href')
Nach dem Login kopieren

Ich bin mir jedoch ziemlich sicher, dass der Selektor korrekt ist. Was habe ich falsch gemacht?

Workaround

Wie @hymns for disco in den Kommentaren sagte, musste ich einfach eine Weile warten, nachdem die Suche beendet war.

el.MustInput("Lionel Messi")

time.Sleep(time.Second)

link := page.MustEval(`()=> document.querySelector('aSelector...').href`)
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie greife ich über Web Scraping auf dynamische HTML-Elemente zu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!