Bagaimana untuk mengakses elemen HTML dinamik melalui pengikisan web?

王林
Lepaskan: 2024-02-09 09:51:17
ke hadapan
338 orang telah melayarinya

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

<form>
    <input> <!--this is the searcher-->
<form/>
Salin selepas log masuk

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")
Salin selepas log masuk

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

Saya mencuba ini:

diviwant := page.mustelement("aselector...")
diviwant.mustclick()
Salin selepas log masuk

Dan ini:

diviwant := page.mustelement("aselector...").mustwaitvisible()
diviwant.mustclick()
Salin selepas log masuk

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
Salin selepas log masuk

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

link := page.musteval(`()=> document.queryselector('aselector...').href`)
Salin selepas log masuk

Tetapi ia mengembalikan ini:

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

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`)
Salin selepas log masuk

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!

Label berkaitan:
sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!