chromedp自动启动为headless模式
// Command click is a chromedp example demonstrating how to use a selector to
// click on an element.
package main import (
"context"
"fmt"
"github.com/chromedp/cdproto/page"
"github.com/chromedp/chromedp"
"github.com/chromedp/chromedp/runner"
"log"
"os"
"time"
) func main() {
var err error // create context
ctxt, cancel := context.WithCancel(context.Background())
defer cancel() // create chrome instance
//c, err := chromedp.New(ctxt, chromedp.WithLog(log.Printf))
//if err != nil {
// log.Fatal(err)
//} c, err := NewHeadless(ctxt, `https://xxx.xx`)
if err != nil {
log.Fatalf("new headless: %s",err)
} // run task list
err = c.Run(ctxt, click())
if err != nil {
log.Fatalf("task err: %s",err)
} // shutdown chrome
err = c.Shutdown(ctxt)
if err != nil {
log.Fatalf("shutdown err: %s",err)
} // wait for chrome to finish
err = c.Wait()
if err != nil {
log.Fatalf("wait err: %s",err)
}
} func click() chromedp.Tasks {
//url := `https://free-ss.site`
//sect := "div.main > div > table > tbody >tr:nth-child(2) > td:nth-child(9) > a"
sect := `//a[@href="v/443.json"]`
wd,_ := os.Getwd()
fmt.Println(wd)
return chromedp.Tasks{
//chromedp.Navigate(url),
chromedp.WaitVisible(sect),
page.SetDownloadBehavior(page.SetDownloadBehaviorBehaviorAllow).WithDownloadPath(wd),
chromedp.Click(sect, chromedp.NodeVisible),
chromedp.Sleep( * time.Second),
}
} // NewHeadless 创建headless chrome实例
func NewHeadless(ctx context.Context, starturl string) (*chromedp.CDP, error) {
// runner.Flag设置启动headless chrome时的命令行参数
// Windows用户需要设置runner.Flag("disable-gpu", true),具体信息参见文档的FAQ
run, err := runner.New(runner.Flag("headless", false),runner.StartURL(starturl)) if err != nil {
return nil, err
} // run.Start启动实例
err = run.Start(ctx)
if err != nil {
return nil, err
} // 默认情况chromedp会输出大量log,因为是示例所以选择屏蔽,dropChromeLogs为自定义函数,形式为func(string, ...interface{}){}
// 使用runner初始化chromedp实例
// 实例在使用完毕后需要调用c.Shutdown()来释放资源
//c, err := chromedp.New(ctx, chromedp.WithRunner(run), chromedp.WithErrorf(dropChromeLogs))
c, err := chromedp.New(ctx, chromedp.WithRunner(run), chromedp.WithLog(log.Printf))
if err != nil {
return nil, err
} return c, nil
}
chromedp自动启动为headless模式的更多相关文章
- 通过Headless模式执行selenium脚本
我们在通过Selenium运行自动化测试时,必须要启动浏览器,浏览器的启动与关闭必然会影响执行效率,而且还会干扰你做其它事情(本机运行的话) Chrome Headless模式 Python Sele ...
- java.awt.headless 模式
1. 什么是 java.awt.headless? Headless模式是系统的一种配置模式.在系统可能缺少显示设备.键盘或鼠标这些外设的情况下可以使用该模式. 2. 何时使用和headless mo ...
- Rendertron:谷歌 Chrome 新的 headless 模式又贡献了一个新的技巧
摘自:https://zhuanlan.zhihu.com/p/31670033 Rendertron:JavaScript Web 富应用的一个老问题是如何使这些页面的动态渲染部分可供搜索引擎检索. ...
- 技能树升级——Chrome Headless模式 - 全栈客栈 - SegmentFault
技能树升级--Chrome Headless模式 - 全栈客栈 - SegmentFault TNPM
- Chrome Headless模式
在 Chrome 59 版本开始已经开始支持了 Headless 模式,也就是无界面模式,这样爬取的时候就不会弹出浏览器了,如果要使用此模式请把 Chrome 升级到 59 版本及以上,启用 Head ...
- 关于jvm系统属性-Djava.awt.headless 模式
1. 什么是 java.awt.headless? Headless模式是系统的一种配置模式.在系统可能缺少显示设备.键盘或鼠标这些外设的情况下可以使用该模式. 2. 何时使用和headless mo ...
- Chrome headless 模式
我们在通过Selenium运行自动化测试时,必须要启动浏览器,浏览器的启动与关闭必然会影响执行效率,而且还会干扰你做其它事情(本机运行的话). 那能不能把自动化测试的运行放在后台?当然可以! html ...
- selenium自动化浏览器后台运行headless模式
通过selenium做WEB自动化的时候,必须要启动浏览器, 浏览器的启动与关闭会影响执行效率. 当我们在自己电脑运行代码时,还会影响做别的事情. 鉴于这种情况,Google针对Chrome浏览器新增 ...
- 【转】Chrome headless 模式
原文地址: http://www.cnblogs.com/fnng/p/7797839.html 我们在通过Selenium运行自动化测试时,必须要启动浏览器,浏览器的启动与关闭必然会影响执行效率,而 ...
随机推荐
- Codeforces 237E
没啥好说的 #include<iostream> #include<algorithm> #include<cstdio> #include<cstring& ...
- json转译的问题
今天遇到一个之前没遇到的情况 这边调用接口的时候,一串json数据我直接解析成php的时候,太长导致我在使用 $json = json_encode($list);转译成的时候,里面有一个数据是时间戳 ...
- python连接mysql数据库遇到的问题
1.源代码: from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker from sqlalchemy ...
- Python 3.6 TypeEror: iter() returned non-iterator of type
环境:Python 3.6 class Fabs(object): def __init__(self,max): self.max = max self.n, self.a, self.b = 0, ...
- JS你可能还不知道的一些知识点(一)
js程序是用Unicode字符集编写的, 2.转义字符:反斜线 1 2 3 4 function Test(){ var s='you\'re right,it can\'t be a quote ...
- 查看CPU和内存,用机器指令和汇编指令编程【Debug模式】
命令 作用 举例 R 查看,改变CPU寄存器的内容 查看:r 改写:r ax D 查看内存中的内容 d 1000:0 f E 改写内存中的内容 e 1000:0 f U 将内存中的机器指令翻译成汇编指 ...
- Java基础16-类与对象
1.如何创建一个类 public class Person{ //属性 String name; String genter; int age; //方法 public void eat(){ Sys ...
- Murano Weekly Meeting 2015.09.29
Meeting time: 2015.September.29th 1:00~2:00 Chairperson: Serg Melikyan, PTL from Mirantis Meeting s ...
- 关于docker remote api未授权访问漏洞的学习与研究
漏洞介绍: 该未授权访问漏洞是因为docker remote api可以执行docker命令,从官方文档可以看出,该接口是目的是取代docker 命令界面,通过url操作docker. docker ...
- oracle账户密码过期,修改为无限制
查看用户的proifle是哪个,一般是default: sql>SELECT username,PROFILE FROM dba_users; 查看指定概要文件(如default)的密码有效期设 ...