• webqwe-资源分享和开发经验
AD
AD

Home / 开发 / Golang 利用Chromedp爬取m3u8地址,无视一切加密

Golang 利用Chromedp爬取m3u8地址,无视一切加密

2023-05-20 14:00:56
894 阅读

原理是直接监听Network,发现关键字m3u8直接返回地址。

无视各种隐藏m3u8或加密,直接获取结果。

package main

import (
	"context"
	"log"
	"strings"
	"time"

	"github.com/chromedp/cdproto/network"
	"github.com/chromedp/chromedp"
)

func main() {

	GetNbyyUrlM3u4("需要获取m3u8地址的页面url")
}

//浏览器获取视频页面的 m3u8地址
func GetNbyyUrlM3u4(urlstr string) string {
	opts := append(chromedp.DefaultExecAllocatorOptions[:],
		chromedp.NoDefaultBrowserCheck, //不检查默认浏览器
		chromedp.Flag("window-size", "50,400"),
		chromedp.Flag("headless", false),                 //开启图像界面,重点是开启这个
		chromedp.Flag("ignore-certificate-errors", true), //忽略错误
		chromedp.Flag("disable-web-security", true),      //禁用网络安全标志
		chromedp.NoFirstRun,                              //设置网站不是首次运行
		chromedp.UserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.164 Safari/537.36"), //设置UserAgent
	)
	allocCtx, cancel := chromedp.NewExecAllocator(context.Background(), opts...)
	defer cancel()

	// create chrome instance
	ctx, cancel := chromedp.NewContext(
		allocCtx,
		// chromedp.WithDebugf(log.Printf),
	)
	defer cancel()

	// create a timeout
	ctx, cancel = context.WithTimeout(ctx, 80*time.Second)
	defer cancel()

	// ensure that the browser process is started
	// 确保浏览器进程已启动
	if err := chromedp.Run(ctx); err != nil {
		panic(err)
	}

	// listen network event
	c := make(chan string)
	// 监听网络事件
	listenUrlForNetworkEvent(ctx, urlstr, c)

	chromedp.Run(ctx,
		network.Enable(),
		chromedp.Navigate(urlstr),
		chromedp.WaitVisible(`body`, chromedp.BySearch),
	)
	m3u8Url := <-c

	return m3u8Url
}

//监听 获取m3u8
func listenUrlForNetworkEvent(ctx context.Context, urlstr string, c chan string) {
	chromedp.ListenTarget(ctx, func(ev interface{}) {
		switch ev := ev.(type) {

		case *network.EventResponseReceived: //收到事件响应
			resp := ev.Response
			if len(resp.Headers) != 0 {
				// log.Printf("received headers: %s", resp.Headers)
				if strings.Index(resp.URL, "m3u8") != -1 {
					log.Printf("下载m3u8地址: %s", resp.URL)
					c <- resp.URL
				}
			}

		}
		// other needed network Event
	})
}
go run .\main.go
2023/05/20 13:58:24 下载m3u8地址: https://xxxxxxxxxx/xxx




uuid怎么下载(免费) | 求资源
本站提供的一切软件、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。 本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。 如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!
author
pings

每天都在打酱油~

评论
登录后评论