PHP-Editor Erdbeere, hallo! Was das von Ihnen erwähnte Problem betrifft: Wenn chromedp click in Ihrem Golang-Code nicht funktioniert, kann ich Ihnen helfen, das Problem herauszufinden. chromedp ist eine Bibliothek, die das Chrome DevTools-Protokoll zur Automatisierung verwendet. Die Click-Methode wird zum Simulieren von Mausklickereignissen verwendet. Zu den möglichen Problemen gehören: 1. Das Seitenelement ist unsichtbar oder wird durch andere Elemente blockiert. 2. Die Parameter der Click-Methode werden falsch übergeben. 3. Die Version von chromedp ist nicht mit der Chrome-Browserversion kompatibel . Andere Probleme mit der Codelogik. Bitte geben Sie weitere Details an und ich werde so schnell wie möglich eine Lösung anbieten.
Ich verwende chromedp, um Scraper zu entwickeln.
Um den gewünschten Inhalt (Seiten-HTML) zu erhalten, muss ich auf eine bestimmte Schaltfläche klicken.
Also habe ich chromedp.click und chromedp.outerhtml verwendet, aber ich habe nur den HTML-Code der Seite vor dem Klick erhalten, nicht den HTML-Code der Seite, nachdem der Klick abgeschlossen war.
Können Sie meinen Code sehen und mir vorschlagen, wie ich ihn beheben kann?
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)
Ich gebe dir die Homepage und die Schaltflächen zurück, die ich anklicken muss
Seiten-URL: https://pts.map.naver.com/end-subway/ends/web/11321/home
Der Schaltflächenbereich, auf den ich klicken muss:
Vielen Dank
Die gewünschte Seite wird in einem neuen Tab (Ziel) geöffnet.
In diesem Fall können wir chromedp.waitnewtarget verwenden, um einen Kanal zu erstellen, von dem wir die Ziel-ID des neuen Tabs erhalten können. Erstellen Sie dann mit der Option chromedp.withtargetid einen neuen Kontext, damit wir eine Verbindung zum neuen Tab herstellen können. Von nun an ist Ihnen alles vertraut.
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) }
Das obige ist der detaillierte Inhalt vonchromedp click funktioniert in meinem Golang-Code nicht. Können Sie das Problem identifizieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!