chromedp.Evaluate(`document.body.innerText;`

// Command eval is a chromedp example demonstrating how to evaluate javascript
// and retrieve the result.
package main

import (
	"context"
	"fmt"
	"html"
	"log"
	"strconv"
	"strings"

	"github.com/chromedp/chromedp"
)

type Node struct {
	Node string `json:"node"`
}

func UnescapeUnicode(raw []byte) ([]byte, error) {
	str, err := strconv.Unquote(strings.Replace(strconv.Quote(string(raw)), `\\u`, `\u`, -1))
	if err != nil {
		return nil, err
	}
	return []byte(str), nil
}

// 作者:波罗学
// 链接:https://www.zhihu.com/question/330544039/answer/724325798
// 来源:知乎
// 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
func main() {
	// 禁用chrome headless
	opts := append(chromedp.DefaultExecAllocatorOptions[:],
		chromedp.Flag("headless", false),
	)
	allocCtx, cancel := chromedp.NewExecAllocator(context.Background(), opts...)
	defer cancel()
	// create context
	ctx, cancel := chromedp.NewContext(
		allocCtx,
		chromedp.WithLogf(log.Printf),
	)
	// ctx, cancel := chromedp.NewContext(context.Background())
	defer cancel()

	// run task list
	// var res []string
	var res []byte
	// var v []byte
	err := chromedp.Run(ctx,
		chromedp.Navigate(`https://baidu.com/`),
		chromedp.Evaluate(`document.body.innerText;`, &res),
	)
	if err != nil {
		log.Fatal(err)
	}
	v, _ := UnescapeUnicode(res)
	// var str string = string(res[1 : len(res)-1])
	var str string = string(v[:])
	// node := []Node{}
	// if err := json.Unmarshal(res, &node); err != nil {
	// 	log.Fatal(err)
	// }
	log.Printf("window object keys: %v", html.UnescapeString(str))
	fmt.Printf("html.UnescapeString:%s", html.UnescapeString(str))
	hunstr := "\u65b0\u65b0\u95fbhao123\u5730\u56fe\u8d34\u5427\u89c6"
	fmt.Println()
	fmt.Printf("html.UnescapeString:%s", html.UnescapeString(html.UnescapeString(hunstr)))
	fmt.Println()
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值