Maison > développement back-end > Golang > Comment accéder aux éléments HTML dynamiques via le web scraping ?

Comment accéder aux éléments HTML dynamiques via le web scraping ?

王林
Libérer: 2024-02-09 09:51:17
avant
382 Les gens l'ont consulté

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

L'éditeur php Xiaoxin est là pour présenter une méthode permettant d'accéder aux éléments HTML dynamiques via l'exploration du Web. Lorsque nous explorons des pages Web, nous rencontrons parfois du contenu généré dynamiquement qui ne peut être obtenu directement tant que la page Web n'est pas chargée. Heureusement, il existe des outils et des techniques que nous pouvons utiliser pour résoudre ce problème. Cet article présentera une méthode basée sur PHP qui peut être utilisée pour explorer et accéder facilement aux éléments HTML dynamiques. Nous allons jeter un coup d'oeil!

Contenu de la question

J'utilise go-rod pour le web scraping. Je souhaite accéder aux liens dans le flux <a>. Pour réaliser cela a 可见,我必须完成一个搜索器,它是一个 input ,具有下一个格式(没有 submit) :

<form>
    <input> <!--this is the searcher-->
<form/>
Copier après la connexion

Alors quand j'ai fini, voici à quoi je veux accéder a :

Jusqu’ici, tout va bien. Voici le code que j'ai utilisé pour compléter le moteur de recherche :

//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")
Copier après la connexion

Maintenant, le problème se pose lorsque je veux cliquer sur le a qui apparaît après avoir terminé la recherche.

J'ai essayé ceci :

diviwant := page.mustelement("aselector...")
diviwant.mustclick()
Copier après la connexion

Et ça :

diviwant := page.mustelement("aselector...").mustwaitvisible()
diviwant.mustclick()
Copier après la connexion

Cependant, ils me renvoient tous la même erreur :

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
Copier après la connexion

Alors, en cherchant des solutions, j'ai trouvé ce problème github et j'ai essayé d'obtenir le lien via cette méthode :

link := page.musteval(`()=> document.queryselector('aselector...').href`)
Copier après la connexion

Mais ça renvoie ceci :

panic: eval js error: TypeError: Cannot read properties of null
(reading 'href')
Copier après la connexion

Cependant, je suis presque sûr que le sélecteur est correct. Qu'ai-je fait de mal?

Solution de contournement

Comme @hymns for disco l'a dit dans les commentaires, j'ai juste dû attendre un moment après que le chercheur ait terminé.

el.MustInput("Lionel Messi")

time.Sleep(time.Second)

link := page.MustEval(`()=> document.querySelector('aSelector...').href`)
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal