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

PHPz
Lepaskan: 2024-02-10 09:54:10
ke hadapan
584 orang telah melayarinya

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

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

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!

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