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 ?

王林
王林avant
2024-02-09 09:51:17383parcourir

如何通过网页抓取访问动态 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 3499910bf9dac5ae3c52d5ede7383485. Pour réaliser cela a 可见,我必须完成一个搜索器,它是一个 input ,具有下一个格式(没有 submit) :

<form>
    <input> <!--this is the searcher-->
<form/>

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

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

Et ça :

diviwant := page.mustelement("aselector...").mustwaitvisible()
diviwant.mustclick()

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

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

Mais ça renvoie ceci :

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

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

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer