Rumah  >  Artikel  >  pembangunan bahagian belakang  >  klik chromedp tidak berfungsi dalam kod golang saya. Bolehkah anda mengenal pasti masalahnya?

klik chromedp tidak berfungsi dalam kod golang saya. Bolehkah anda mengenal pasti masalahnya?

PHPz
PHPzke hadapan
2024-02-10 09:54:10547semak imbas

chromedp click 在我的 golang 代码中不起作用。你能找出问题所在吗?

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.

Kandungan soalan

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

Penyelesaian

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!

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