为了账号安全,请及时绑定邮箱和手机立即绑定

如何从 HTML 中的嵌入式 Javascript 中抓取值?

如何从 HTML 中的嵌入式 Javascript 中抓取值?

Go
偶然的你 2021-11-01 10:18:33
我需要从网页中嵌入的 Javascript 中解析一些值。我试图用这样的东西标记 HTML,但它没有标记 Javascript 部分。func CheckSitegroup(httpBody io.Reader) []string {    sitegroups := make([]string, 0)    page := html.NewTokenizer(httpBody)    for {        tokenType := page.Next()        fmt.Println("TokenType:", tokenType)        // check if HTML file has ended        if tokenType == html.ErrorToken {            return sitegroups        }        token := page.Token()        fmt.Println("Token:", token)        if tokenType == html.StartTagToken && token.DataAtom.String() == "script" {            for _, attr := range token.Attr {                fmt.Println("ATTR.KEY:", attr.Key)                sitegroups = append(sitegroups, attr.Val)            }        }    }}HTML 正文中的脚本如下所示,我需要广告系列编号(如果没有编号或根本没有 test.campaign =,则为 nil / "" - 站点组也是如此)。有没有简单的方法来获取信息?我想过正则表达式,但也许还有别的东西?从未使用过正则表达式。<script type="text/javascript" >    var test = {};    test.campaign = "8d26113ba";    test.isTest = "false";    test.sitegroup = "Homepage";</script>
查看完整描述

2 回答

?
饮歌长啸

TA贡献1951条经验 获得超3个赞

Go 标准字符串库附带了许多有用的函数,您可以使用它们来解析 JavaScript 代码以获取所需的活动编号。


以下代码可以从问题中提供的 js 代码中获取活动编号(在 Go Playground 上运行代码):


package main


import (

    "bufio"

    "fmt"

    "os"

    "strings"

)


const js = `                                                                    

<script type="text/javascript" >                                                

    var test = {};                                                              

    test.campaign = "8d26113ba";                                                

    test.isTest = "false";                                                      

    test.sitegroup = "Homepage";                                                

</script>                                                                       

`


func StringToLines(s string) []string {

    var lines []string


    scanner := bufio.NewScanner(strings.NewReader(s))

    for scanner.Scan() {

        lines = append(lines, scanner.Text())

    }


    if err := scanner.Err(); err != nil {

        fmt.Fprintln(os.Stderr, "reading standard input:", err)

    }


    return lines

}


func getCampaignNumber(line string) string {

    tmp := strings.Split(line, "=")[1]

    tmp = strings.TrimSpace(tmp)

    tmp = tmp[1 : len(tmp)-2]

    return tmp

}


func main() {

    lines := StringToLines(js)

    for _, line := range lines {

        if strings.Contains(line, "campaign") {

            result := getCampaignNumber(line)

            println(result)

        }

    }

}


查看完整回答
反对 回复 2021-11-01
  • 2 回答
  • 0 关注
  • 160 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信