javascript - 如何在 Golang 请求中执行 javascript 异步代码

标签 javascript ajax asynchronous go request

我需要使用 读取动态生成页面的内容从网站上使用此代码在 ,它适用于非 ajax 页面,但我找不到执行此操作的包或示例。谢谢。

package main

import(

    "fmt"
    "time"
    "net/http"
    "github.com/PuerkitoBio/goquery"
    "strings"
    "strconv"

)

func main() {

    var masterURI [1]string
    masterURI[0] = "http://uri1"
    /*masterURI[1] = "http://uri2"
    masterURI[2] = "http://uri3"*/

    for _, uri := range masterURI {

        doc, err := extractHTML(uri)

        check(err)

        search := doc.Find(".pagination li a span").Eq(-1)

        numPages, err := strconv.Atoi(search.Text())

        check(err)

        var i int

        for i = 1; i <= numPages; i++ {

            page := uri + "#/page-" + strconv.Itoa(i)

            fmt.Println("\n========> " + page)

            doc, err := extractHTML(page)

            check(err)

            search := doc.Find(".product-name")

            for i := range search.Nodes {
                product := strings.TrimSpace(search.Eq(i).Text())
                fmt.Println(product)
                // use `single` as a selection of 1 node
            }

        }

        fmt.Println(" --- ")

    }

}

func extractHTML(url string) (doc *goquery.Document, err error) {

    userAgent := "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36 OPR/32.0.1948.69";

    trans := &http.Transport{
       DisableKeepAlives: true,
    }

    timeout := time.Duration(600 * time.Second)

    myClient := &http.Client{Transport: trans, Timeout: timeout}

    req, err := http.NewRequest("GET", url, nil)

    check(err)

    req.Header.Add("User-Agent", userAgent)

    resp, err := myClient.Do(req)

    req.Close = true

    check(err)

    if resp.StatusCode == 200 {

        doc, err = goquery.NewDocumentFromResponse(resp) 

    }

    check(err)

    resp.Body.Close()

    return doc, err

}

func check(err error) {

    if err != nil {

        panic(err)

    }

}

最佳答案

由于有些人对您的回答投了反对票,我将尽力为您指明正确的方向。

您不在 Go 中执行 javascript。您通常在浏览器中执行此操作,使用开发工具(F12 或其他),查看“网络”选项卡以查看正在调用的 URL,然后在您的代码中调用那个 URL。

关于javascript - 如何在 Golang 请求中执行 javascript 异步代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33307501/

相关文章:

javascript - 如何使这个方法异步?

javascript - 如何找到生成XMLHttpRequest的页面的文件名?

javascript - 如何在 jspdf.js 中设置导出表格的字体大小?

javascript - Jquery resize() 导致屏幕闪烁和 div 偏移

javascript - Grails — CSS 和 JavaScript 缓存

jQuery:req.readyState == 3 可能吗?

javascript - Django 制作按钮 Ajax

c# - 为什么异步调用后调试器不在断点处停止?

c# - 为什么 SignInAsync 是异步的?

javascript - 如何将键从对象推送到数组?