Go语言 滚动到无限滚动页面的底部,然后获取html文档

xkrw2x1b  于 2023-02-27  发布在  Go
关注(0)|答案(1)|浏览(338)

我有点不知道如何执行这个任务,因为我对golang很陌生。我试图滚动到一个使用无限滚动的页面底部,以便加载所有元素,然后将响应保存为HTML文件(或者更好的是只得到标签),因为很明显,如果没有滚动,它将只返回部分元素,因为它是无限滚动。s也没有可识别的页脚或其他东西,我可以跳到使用杆或chromedp,有什么帮助吗?:)

s4n0splo

s4n0splo1#

这取决于如何实现无限滚动页面。
chromedp中,我们通常这样滚动页面:

package main

import (
    "context"
    "time"

    "github.com/chromedp/chromedp"
    "github.com/chromedp/chromedp/kb"
)

func main() {
    opts := append(chromedp.DefaultExecAllocatorOptions[:],
        // Disable the headless mode to see what happen.
        chromedp.Flag("headless", false),
    )

    ctx, cancel := chromedp.NewExecAllocator(context.Background(), opts...)
    defer cancel()

    ctx, cancel = chromedp.NewContext(ctx)
    defer cancel()

    if err := chromedp.Run(ctx,
        chromedp.Navigate("https://intoli.com/blog/scrape-infinite-scroll/demo.html"),
    ); err != nil {
        panic(err)
    }

    for i := 0; i < 10; i++ {
        if err := chromedp.Run(ctx,
            // Option 1 to scroll the page: window.scrollTo.
            chromedp.Evaluate(`window.scrollTo(0, document.documentElement.scrollHeight)`, nil),
            // Slow down the action so we can see what happen.
            chromedp.Sleep(2*time.Second),
            // Option 2 to scroll the page: send "End" key to the page.
            chromedp.KeyEvent(kb.End),
            chromedp.Sleep(2*time.Second),
        ); err != nil {
            panic(err)
        }
    }
}

相关问题