用golang chromedp 操作已经打开的chrome浏览器
win7 环境,主要是一开始想在代码中先用exec.Command启动chrome,但始终不能成功监听9222端口,折腾了很长时间,
需要先手工启动chrome监听端口(具体写在代码注释中了)然后再运行代码,在开源代码基础上稍作修改,将访问不了的google换成sohu。
效果就是通过代码将浏览器导航到了sohu.com
// Command standalone is a chromedp example demonstrating how to use chromedp
// with a standalone (ie, a "pre-existing" / manually started) chrome instance.
package main import (
"context"
"fmt"
"io/ioutil"
"log" "time" "github.com/chromedp/cdproto/cdp"
"github.com/chromedp/chromedp"
"github.com/chromedp/chromedp/client"
) func main() {
//用cmd中用带 /c start命令,无法成功启动chrome监听端口,
//用exec.Command("C:/Program Files (x86)/Google/Chrome/Application/chrome.exe", "--remote-debugging-port=9222").Run()也不行
//可以在windows cmd 中手工执行下一行的命令启动chrome,注意修改chrome实际路径,另外注意将chrome.exe加入windows防火墙
//cmd /c "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --remote-debugging-port=9222
//或用下一行在cmd中手工启动chrome,和上一行的命令类似,注意修改chrome实际路径,注意命令的前半部分有双引号,后半部分没有双引号
//"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --remote-debugging-port=9222
time.Sleep( * time.Second)
var err error // create context
ctxt, cancel := context.WithCancel(context.Background())
defer cancel() // create chrome
c, err := chromedp.New(ctxt, chromedp.WithTargets(client.New().WatchPageTargets(ctxt)), chromedp.WithLog(log.Printf))
if err != nil {
log.Fatal(err)
}
fmt.Println("ctxt")
// run task list
var site, res string
err = c.Run(ctxt, googleSearch("site:sohu.com", "Easy Money Management", &site, &res))
if err != nil {
log.Fatal(err)
} log.Printf("saved screenshot of #testimonials from search result listing `%s` (%s)", res, site)
} func googleSearch(q, text string, site, res *string) chromedp.Tasks {
var buf []byte
sel := fmt.Sprintf(`//a[text()[contains(., '%s')]]`, text)
return chromedp.Tasks{
chromedp.Navigate(`https://www.sohu.com`),
chromedp.Sleep( * time.Second),
chromedp.WaitVisible(`#hplogo`, chromedp.ByID),
chromedp.SendKeys(`#lst-ib`, q+"\n", chromedp.ByID),
chromedp.WaitVisible(`#res`, chromedp.ByID),
chromedp.Text(sel, res),
chromedp.Click(sel),
chromedp.Sleep( * time.Second),
chromedp.WaitVisible(`#footer`, chromedp.ByQuery),
chromedp.WaitNotVisible(`div.v-middle > div.la-ball-clip-rotate`, chromedp.ByQuery),
chromedp.Location(site),
chromedp.Screenshot(`#testimonials`, &buf, chromedp.ByID),
chromedp.ActionFunc(func(context.Context, cdp.Executor) error {
return ioutil.WriteFile("testimonials.png", buf, )
}),
}
}
用golang chromedp 操作已经打开的chrome浏览器的更多相关文章
- selenium打开指定Chrome账号
selenium打开指定Chrome账号 获取User Data路径 打开目标Chrome,在搜索栏输入chrome://version,找到"个人资料路径". 这里获取到的路径为 ...
- [疑难杂症]__点击win10屏幕最上方的边界会莫名其妙打开Internet Explorer浏览器,不胜其烦(2次ps:已解决!!!).
关于问题描述: 每次误点到屏幕上边界会莫名打卡Internet Explorer浏览器(一开始开以为是自带的Edge浏览器,后来在查找相关解决方法的时候才发现并不是同一款浏览器) 这个问题存在好久了, ...
- Chrome浏览器快捷键
Chrome窗口和标签页快捷键:Ctrl+N 打开新窗口 Ctrl+T 打开新标签页 Ctrl+Shift+N 在隐身模式下打开新窗口 Ctrl+O,然后选择文件 在谷歌浏览器中打开计算机上的文件 按 ...
- Chrome快捷键, Mac 下 Chrome 浏览器 快捷键
Chrome窗口和标签页快捷键:Ctrl+N 打开新窗口 Ctrl+T 打开新标签页 Ctrl+Shift+N 在隐身模式下打开新窗口 Ctrl+O,然后选择文件 在谷歌浏览器中打开计算机上的文件 按 ...
- Google Chrome浏览器中如何使用命令
Google Chrome浏览器中如何使用命令 | 浏览:2974 | 更新:2014-02-23 23:12 | 标签:chrome 1 2 3 分步阅读 Google Chrome浏览器有很多的特 ...
- 改变Chrome浏览器主程序_缓存_个人信息路径
改变Chrome浏览器缓存_个人信息路径(亲测) actionx2上传于2012-10-26|(7人评价)|3077人阅读|41次下载|文档简介|举报文档 在手机打开 改变 Chrom ...
- 关于如何解决谷歌Chrome浏览器空白页的问题
谷歌Chrome浏览器突然不打开任何网页,无论是任何站点(如http://www.baidu.com), 还是Chrome浏览器的设置页面(chrome://settings/), 扩展页面 ( ch ...
- google chrome 浏览器书签丢失问题
在一次新打开标签页时,电脑卡死,强制重启后打开google chrome 浏览器,发现历史什么的都在,但书签栏全部丢失了 找到 系统盘:\Users\用户名\AppData\Local\Google\ ...
- Chrome浏览器跨域
配置新版Chrome浏览器跨域,需要创建用户数据文件夹,在其中保存浏览器的缓存.历史记录.收藏夹等数据. Windows系统Chrome跨域 1 下载Chrome 64位绿色版,解压缩,并在桌面创建快 ...
随机推荐
- 12 Linux Which Command, Whatis Command, Whereis Command Examples
This Linux tutorial will explain the three "W" commands. The three "W"s are what ...
- 一、Composer下载安装
1.composer下载 英文网站:https://getcomposer.org/ 中文镜像:https://www.phpcomposer.com/ 2.composer安装 • win下安装图文 ...
- 3;XHTML排列清单控制标记
1.无序号条例式清单<ul> 2.有序号条例式清单<ol> 3.无序列表和有序列表的结合应用 4.叙述式清单<dl> 排列清单控制标记可以创建一般的列表.编号列表或 ...
- saltstack部署配置
共计使用三台虚拟机进行部署实验,系统环境:centos7.3 在master上进行部署配置: 配置主机名 [root@localhost ~]# hostname salt-master [root@ ...
- htnl 定位
相对定位 相对定位:position:relative; 相对定位:相对定位是相对于元素在文档中的初始位置——首先它出现在它所在的位置上(即不设置position时的位置,然后通过设置垂直或水平位置, ...
- C# 利用ZXing.Net来生成条形码和二维码
本文是利用ZXing.Net在WinForm中生成条形码,二维码的小例子,仅供学习分享使用,如有不足之处,还请指正. 什么是ZXing.Net? ZXing是一个开放源码的,用Java实现的多种格式的 ...
- Play 2D games on Pixel running Android Nougat (N7.1.2) with Daydream View VR headset
- [Objective-C] Copy 和 MutableCopy
看了几篇文章,因为文章很新手向,所以内容很繁琐.故整理一下重点,写了测试程序去了解几个知识点,不讨论基本概念.新博客wossoneri.com传送门 非集合类对象的copy与mutableCopy / ...
- phpstudy 上怎么运行 thinkPHP ?
最近在学习 thinkPHP ,但是本地使用的是 phpstudy ,就想在 phpstudy 中使用 thinkPHP ,这样我的环境就不用再改变也可以学习. 首先,先要 下载 thinkPHP , ...
- Android Handler、Message、MessageQueue和Looper官方说明
Handler官方说明 官方API文档:https://developer.android.google.cn/reference/android/os/Handler Handler允许您发送和处理 ...