Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk mengakses elemen HTML dinamik melalui pengikisan web?

Bagaimana untuk mengakses elemen HTML dinamik melalui pengikisan web?

王林
王林ke hadapan
2024-02-09 09:51:17391semak imbas

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

editor php Xiaoxin berada di sini untuk memperkenalkan kaedah untuk mengakses elemen HTML dinamik melalui rangkak web. Apabila kami merangkak halaman web, kadangkala kami menemui kandungan yang dijana secara dinamik yang tidak boleh diperoleh secara langsung sehingga halaman web dimuatkan. Nasib baik, terdapat alat dan teknik yang boleh kita gunakan untuk menyelesaikan masalah ini. Artikel ini akan memperkenalkan kaedah berasaskan PHP yang boleh digunakan untuk merangkak dan mengakses elemen HTML dinamik dengan mudah. Mari lihat!

Kandungan soalan

Saya menggunakan go-rod untuk mengikis web. Saya mahu mengakses pautan dalam suapan 3499910bf9dac5ae3c52d5ede7383485. Untuk membuat ini a 可见,我必须完成一个搜索器,它是一个 input ,具有下一个格式(没有 submit):

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

Jadi apabila saya selesai, inilah yang saya mahu akses a:

Sampai sini, semuanya baik-baik saja. Ini adalah kod yang saya gunakan untuk melengkapkan pencari:

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

Sekarang masalah timbul apabila saya ingin klik pada a yang muncul selepas selesai carian.

Saya mencuba ini:

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

Dan ini:

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

Walau bagaimanapun, mereka semua membalas saya kesilapan yang sama:

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

Jadi, semasa mencari beberapa penyelesaian, saya menemui isu github ini dan mencuba kaedah ini untuk mendapatkan pautan:

link := page.musteval(`()=> document.queryselector('aselector...').href`)

Tetapi ia mengembalikan ini:

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

Namun, saya agak pasti pemilihnya betul. Apa yang saya buat salah?

Penyelesaian

Seperti yang dikatakan @hymns for disco dalam komen, saya hanya perlu menunggu sebentar selepas pencari selesai.

el.MustInput("Lionel Messi")

time.Sleep(time.Second)

link := page.MustEval(`()=> document.querySelector('aSelector...').href`)

Atas ialah kandungan terperinci Bagaimana untuk mengakses elemen HTML dinamik melalui pengikisan web?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam