javascript - 使用 chromedp,从 *runtime.RemoteObject 中获取一个 javascript 对象/数组

标签 javascript google-chrome go web-scraping

我正在使用 chromedp,我想获取在我滚动的页面内声明的 javascript 数组的内容

<script>
                var title = document.title;
                var pages = [{"key1":"value1","key2":1,"external":1},{"key1":"value2", "key2":9}];
</script>

我试过了

var res *runtime.RemoteObject
if err := c.Run(ctxt, chromedp.EvaluateAsDevTools("pages", &res)); err != nil {
    return fmt.Errorf("could not evaluate page : %v", err)
}

json_byte, _ := res.MarshalJSON()
var out bytes.Buffer
_ = json.Indent(&out, json_byte, "", "\t")

log.Printf("pages %s ", out.String())

但它给了我类似的东西

2019/03/08 13:12:52 pages {
        "type": "object",
        "subtype": "array",
        "className": "Array",
        "description": "Array(22)",
        "objectId": "{\"injectedScriptId\":441,\"id\":1}"
}

我希望能够获取可变页面的实际内容(键和值)。获取此内容的方式是什么?

最佳答案

发现将选项/函数 chromedp.EvalAsValue 添加到 eval 就可以了:

if err := c.Run(ctxt, chromedp.EvaluateAsDevTools("pages", &res, chromedp.EvalAsValue)); err != nil {
    return fmt.Errorf("could not evaluate page : %v", err)
}

结果是评价的值(value),不是总结。

关于javascript - 使用 chromedp,从 *runtime.RemoteObject 中获取一个 javascript 对象/数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55063278/

相关文章:

javascript - 前端开发 Mithril.js

javascript - 我可以在 Chrome 扩展程序中包含 CryptoJS 文件吗?

elasticsearch - 如何使用 Go 按时间范围过滤结果在 elasticsearch 中进行搜索

javascript - 由于 "This browser or app may not be secure.",无法使用 selenium 自动化登录谷歌

戈朗 : How to run the same logic at the beginning of every struct member functions?

random - 使用 crypto/rand 通过 rand.Perm 生成排列

javascript - 使用 ASP.Net ajax 库进行跨浏览器 Xml 操作

javascript - 使用 Protractor 从一个单页 Angular 应用程序导航到另一个 Angular 应用程序会给出 "javascript error: document unloaded while waiting for result"

javascript - 如何在两个已知 y 值之间剪裁线段?

java - 解析 Chrome 书签 Json 文件 : Java