html - 如何以编程方式单击网站上的按钮
问题描述
我知道在一些不同的代码中是这样的await page.click
,但我不知道如何在go
. 我正在尝试创建一个完全自动化的结帐脚本。这是我到目前为止所拥有的,它只是打开了网站
package main
import (
"log"
"os/exec"
)
func main() {
err := exec.Command("cmd", "/C", "start", "chrome.exe", "https://www.bestbuy.com/site/pny-geforce-gt1030-2gb-pci-e-3-0-graphics-card-black/5901353.p?skuId=5901353gi").Run()
if err != nil {
log.Println(err)
}
解决方案
你可能想检查https://github.com/chromedp/chromedp
包来控制 Chrome DevTool。
package main
import (
"context"
"log"
"time"
"github.com/chromedp/chromedp"
)
func main() {
// create chrome instance
ctx, cancel := chromedp.NewContext(
context.Background(),
chromedp.WithLogf(log.Printf),
)
defer cancel()
// create a timeout
ctx, cancel = context.WithTimeout(ctx, 15*time.Second)
defer cancel()
// navigate to a page, wait for an element, click
var example string
err := chromedp.Run(ctx,
chromedp.Navigate(`https://golang.org/pkg/time/`),
// wait for footer element is visible (ie, page is loaded)
chromedp.WaitVisible(`body > footer`),
// find and click "Expand All" link
chromedp.Click(`#pkg-examples > div`, chromedp.NodeVisible),
// retrieve the value of the textarea
chromedp.Value(`#example_After .play .input textarea`, &example),
)
if err != nil {
log.Fatal(err)
}
log.Printf("Go's time.After example:\n%s", example)
}
推荐阅读
- java - 带有forloop的scala回文函数
- c# - 无法访问与浏览器相同的源 HTML
- html - 为什么我的 html 正文与页脚重叠?
- java - 使用没有递归 while/for 循环的 Java Stream 找到最大公约数
- php - 无法从控制器传递数据以在 codeigniter 中查看
- dialogflow-es - 如何在谷歌助手上部署一个可以拨打号码的 Dialogflow 机器人?
- xml - Powershell在多个节点中插入相同的属性
- linux - 如何列出最后安装的软件包名称?
- azure - 在 Azure Terraform 中,如何从 .iso 文件创建 VM
- python - ansible Jinja2 模板正则表达式搜索并找到返回字符串