登录
首页 >  Golang >  Go问答

如何在Chromedp中发布请求,模拟表单

来源:stackoverflow

时间:2024-04-13 14:00:24 339浏览 收藏

有志者,事竟成!如果你在学习Golang,那么本文《如何在Chromedp中发布请求,模拟表单》,就很适合你!文章讲解的知识点主要包括,若是你对本文感兴趣,或者是想搞懂其中某个知识点,就请你继续往下看吧~

问题内容

Chromedp 有一个 chromedp.Submit() 函数,它查询 html 页面中存在的表单并提交它。现在我需要的是用纯golang代码发布一个请求,html页面中没有表单元素,类似ajax帖子,这篇文章应该基于当前上下文,包括cookie,标头。 Chromedp 中可以这样做吗?感谢您的任何建议!


正确答案


其中一个选项是使用 chromedp.evaluate() 执行 javascript 代码片段,该代码片段又使用 fetch 发送 post 请求。请参阅下面的演示:

package main

import (
    "context"
    "log"

    "github.com/chromedp/cdproto/runtime"
    "github.com/chromedp/chromedp"
)

func main() {
    ctx, cancel := chromedp.NewContext(context.Background())
    defer cancel()

    js := `
async function postData(url = '', data = {}) {
  const response = await fetch(url, {
    method: 'POST',
    body: JSON.stringify(data)
  });
  return response.text();
}; postData('/post', {answer: 69634319})
    `

    var response string
    if err := chromedp.Run(ctx,
        chromedp.Navigate("https://httpbin.org/cookies/set?name=test"),
        chromedp.Evaluate(js, &response, func(ep *runtime.EvaluateParams) *runtime.EvaluateParams {
            return ep.WithAwaitPromise(true)
        }),
    ); err != nil {
        log.Fatal(err)
    }

    log.Println(response)
}

如果您对 js 表达式感到好奇,请点击此链接以获取更多信息:https://github.com/chromedp/chromedp/issues/1028#issuecomment-1061482792

今天关于《如何在Chromedp中发布请求,模拟表单》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>