Chromedp有一个chromedp.Submit()函数,它查询html页面中存在的表单并提交它。现在我需要的是在纯golang代码中发布一个请求,在html页面中没有表单元素,类似的ajax帖子,这个帖子应该以当前上下文为基础,包括cookie、headers。在Chromedp中可以这样做吗?谢谢您的建议!
发布于 2022-05-18 07:02:58
其中一个选项是使用chromedp.Evaluate()执行JavaScript片段,然后使用获取发送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
https://stackoverflow.com/questions/69634319
复制相似问题