Rumah >pembangunan bahagian belakang >Golang >klik chromedp tidak berfungsi dalam kod golang saya. Bolehkah anda mengenal pasti masalahnya?
php editor strawberry, hello! Berkenaan masalah yang anda nyatakan, jika chromedp click tidak berfungsi dalam kod golang anda, saya boleh membantu anda mengetahui masalah tersebut. chromedp ialah perpustakaan yang menggunakan Chrome DevTools Protocol untuk automasi Kaedah klik digunakan untuk mensimulasikan peristiwa klik tetikus. Masalah yang mungkin termasuk: 1. Elemen halaman tidak dapat dilihat atau disekat oleh elemen lain, menyebabkan klik gagal 2. Parameter kaedah klik tidak dilalui dengan betul 3. Versi chromedp tidak serasi dengan versi pelayar Chrome; Isu logik kod lain. Sila berikan butiran lanjut dan saya akan berikan penyelesaian secepat mungkin.
Saya menggunakan chromedp untuk membangunkan pengikis.
Untuk mendapatkan kandungan yang saya mahukan (halaman html) saya perlu klik pada butang tertentu.
Jadi saya menggunakan chromedp.click dan chromedp.outerhtml, tetapi saya hanya mendapat html halaman sebelum klik, bukan html halaman selepas klik selesai.
Bolehkah anda melihat kod saya dan mencadangkan saya cara untuk membetulkannya?
func runCrawler(URL string, lineNum string, stationNm string) { // settings for crawling opts := append(chromedp.DefaultExecAllocatorOptions[:], chromedp.Flag("headless", false)) // create chrome instance contextVar, cancelFunc := chromedp.NewExecAllocator(context.Background(), opts...) defer cancelFunc() contextVar, cancelFunc = chromedp.NewContext(contextVar) defer cancelFunc() var htmlContent string err := chromedp.Run(contextVar, chromedp.Navigate(URL), chromedp.WaitVisible(".end_footer_area"), chromedp.Click(".end_section.station_info_section > div.at_end.sofzqce > div > div.c10jv2ep.wrap_btn_schedule.schedule_time > button"), chromedp.OuterHTML("html", &htmlContent, chromedp.ByQuery), ) fmt.Println("html", htmlContent) checkErr(err)
Saya memberikan anda kembali halaman utama dan butang yang perlu saya klik
URL halaman: https://pts.map.naver.com/end-subway/ends/web/11321/home
Kawasan butang yang perlu saya klik:
Terima kasih banyak
Halaman yang anda ingin dapatkan dibuka dalam tab baharu (sasaran).
Dalam kes ini, kita boleh menggunakan chromedp.waitnewtarget untuk mencipta chan dari mana kita boleh menerima id sasaran tab baharu. Kemudian buat konteks baharu menggunakan pilihan chromedp.withtargetid supaya kami boleh menyambung ke tab baharu. Mulai sekarang, semuanya sudah biasa kepada anda.
package main import ( "context" "fmt" "strings" "github.com/chromedp/cdproto/target" "github.com/chromedp/chromedp" ) func main() { opts := append(chromedp.DefaultExecAllocatorOptions[:], chromedp.Flag("headless", false), ) ctx, cancel := chromedp.NewExecAllocator(context.Background(), opts...) defer cancel() ctx, cancel = chromedp.NewContext(ctx) defer cancel() var htmlContent string ch := chromedp.WaitNewTarget(ctx, func(i *target.Info) bool { return strings.Contains(i.URL, "/timetable/web/") }) err := chromedp.Run(ctx, chromedp.Navigate("https://pts.map.naver.com/end-subway/ends/web/11321/home"), chromedp.WaitVisible(".end_footer_area"), chromedp.Click(".end_section.station_info_section > div.at_end.sofzqce > div > div.c10jv2ep.wrap_btn_schedule.schedule_time > button"), ) if err != nil { panic(err) } newCtx, cancel := chromedp.NewContext(ctx, chromedp.WithTargetID(<-ch)) defer cancel() if err := chromedp.Run(newCtx, chromedp.WaitReady(".table_schedule", chromedp.ByQuery), chromedp.OuterHTML("html", &htmlContent, chromedp.ByQuery), ); err != nil { panic(err) } fmt.Println("html", htmlContent) }
Atas ialah kandungan terperinci klik chromedp tidak berfungsi dalam kod golang saya. Bolehkah anda mengenal pasti masalahnya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!