pu369com

chromedp常用语句整理

最基本的代码:

复制代码
package main

import (
    "context"
    "log"
    "time"

    "github.com/chromedp/chromedp"
)

func main() {
    log.Printf("自动化助手:")
    dowork()
}

func dowork() {
    //增加选项,允许chrome窗口显示出来
    options := []chromedp.ExecAllocatorOption{
        chromedp.Flag("headless", false),
        chromedp.Flag("hide-scrollbars", false),
        chromedp.Flag("mute-audio", false),
        chromedp.UserAgent(`Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36`),
    }
    options = append(chromedp.DefaultExecAllocatorOptions[:], options...)
    //创建chrome窗口
    allocCtx, cancel := chromedp.NewExecAllocator(context.Background(), options...)
    defer cancel()
    ctx, cancel := chromedp.NewContext(allocCtx)
    defer cancel()
    
     //可以使用多个chromedp.Run()
    if err := chromedp.Run(ctx,
        chromedp.Navigate(`http://192.168.132.80/login/Login.jsp?logintype=1`),
        chromedp.WaitVisible(`#loginid`, chromedp.ByID),
        chromedp.SendKeys(`input[name=loginid]`, "admin"),
        chromedp.WaitVisible(`#loginid`, chromedp.ByID),
        chromedp.SendKeys(`input[name=userpassword]`, "1234"),
        chromedp.Click(`#login`, chromedp.ByID),
        //在这里加上你需要的后续操作,如Navigate,SendKeys,Click等
        chromedp.Sleep(10*time.Second),
    ); err != nil {
        panic(err)
    }

}
复制代码

常用功能:

1、给input设置值(还可以SendKeys)
chromedp.SetValue(`#loginid`, `aa`, chromedp.ByID),
chromedp.SendKeys(`input[name=userpassword]`, "123"),
2、选择元素,除chromedp.ByID,还可用 chromedp.ByJSPath
chromedp.SetValue(`document.querySelector("#loginid")`, `bb`, chromedp.ByJSPath),
3、设置值:
chromedp.SetValue(`#loginid`, `cc`, chromedp.ByQuery),
4、延时几秒:
chromedp.Sleep(10*time.Second),
5、输出OuterHTML(难点在iframe的选择)

chromedp.OuterHTML(`document.querySelectorAll("iframe")[3]`, &text1, chromedp.ByJSPath),

6、在页面上执行javascript

chromedp.EvaluateAsDevTools(`alert("test eval");`, &text1),
7、运行自定义函数
chromedp.ActionFunc(func(ctx context.Context) error {
ioutil.WriteFile("1.txt", []byte(text1), 0777)
return nil
}),
8、获取iframe内容,页面有个id=#cke的td,其中有个iframe,用:
document.querySelector("#cke_contents_doccontent > iframe").contentWindow
上面的语句是在chrome console中测试出来的,
在console中$和document.getElementById返回值类型不一样,一个是数组,可以在console中看出来。
用类似以下语句,获取和设置iframe中的内容:
document.querySelector("#cke_contents_doccontent > iframe").contentWindow.document.querySelector('p').innerText="aaaa"
9、停止网页加载(不停止的话,有时会长时间加载)
chromedp.Stop(),
10、等元素出现时
chromedp.WaitVisible(`#docsubject`, chromedp.ByID),

11、等元素消失时

chromedp.WaitNotVisible(`#docsubject`, chromedp.ByID),

 12、最后写了如下代码

复制代码
chromedp.Run(ctx,
        //chromedp.Emulate(device.IPhone7),
        chromedp.Navigate(`http://192.168.132.80/login/Login.jsp?logintype=1`),
        chromedp.WaitVisible(`#loginid`, chromedp.ByID),
        chromedp.Sleep(1*time.Second),
        chromedp.SendKeys(`input[name=loginid]`, "admin"),
        chromedp.WaitVisible(`#loginid`, chromedp.ByID),
        chromedp.SendKeys(`input[name=userpassword]`, "1234"),
        chromedp.Click(`#login`, chromedp.ByID),
        chromedp.WaitVisible(`#_ButtonCancel_0`, chromedp.ByID),
        chromedp.Click(`#_ButtonCancel_0`, chromedp.ByID),
        chromedp.Stop(),
        chromedp.Navigate(`http://192.168.132.80/docs/docs/DocAddForCK.jsp?mainid=15&subid=49&secid=1143&showsubmit=1&coworkid=&prjid=&isExpDiscussion=&crmid=&hrmid=&topage=`),
        chromedp.WaitVisible(`#docsubject`, chromedp.ByID),
        chromedp.Sleep(1*time.Second),
        chromedp.SendKeys(`input[name=docsubject]`, "aa11"),
        //禁止alert弹窗。 防止错误提醒;参考我上篇文章,其实不需window.alert = function(){return false;};这种暴力方法!
        chromedp.EvaluateAsDevTools(`window.alert = function(){return false;};var doc =document.querySelector("#cke_contents_doccontent > iframe").contentWindow.document;
p = doc.createElement("p");
p.innerText="abc";
doc.body.append(p);`, &buf),
        chromedp.Sleep(1*time.Second),
        chromedp.Click("#BUTTONnull", chromedp.ByID),
        chromedp.Sleep(1*time.Second),
        chromedp.Click(`document.querySelector("#BUTTONnull")`, chromedp.ByJSPath),
        chromedp.ActionFunc(func(ctx context.Context) error {
            ioutil.WriteFile("1.txt", buf, 0777)
            return nil
        }),
        chromedp.Sleep(2*time.Second),
        //chromedp.CaptureScreenshot(&buf),
    )
复制代码

 

posted on   pu369com  阅读(7763)  评论(2编辑  收藏  举报

编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
历史上的今天:
2019-02-20 (golang)HTTP基本认证机制及使用gocolly登录爬取
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示