// 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()
}
chromedp.Evaluate(`document.body.innerText;`
最新推荐文章于 2024-10-28 14:24:17 发布
413

被折叠的 条评论
为什么被折叠?



