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运行自动化测试时,必须要启动浏览器,浏览器的启动与关闭必然会影响执行效率,而 ...
随机推荐
- [例] 用MappedByteBuffer更新文件内容
import java.io.IOException; import java.io.RandomAccessFile; import java.nio.MappedByteBuffer; impor ...
- jdk的环境配置
今天在网上找了关于jdk配置的教程,发现比较繁琐,因此更新下jdk的简单配置教程 注意:jdk的安装必须正确,绝对不允许将jdk和jdr安装在同一层目录!!(建议在java目录下新建jdk和jdr目录 ...
- mac U盘安装盘制作
以下面的版本为例: Install_macOS_Sierra_10.12.6.dmg 解压到桌面,然后打命令 sudo /Users/love/Desktop/Install\ macOS\ Sier ...
- 牛客网Java刷题知识点之字符流缓冲区、BufferedWriter、BufferedReader、BufferedReader-readLine方法原理、自定义MyBufferedReader-read方法、自定义MyBufferedReader-readLine方法
不多说,直接上干货! 把提高效率的动作,封装成一个对象.即把缓冲区封装成一个对象. 就是在一个类里封装一个数组,能对流锁操作数据进行缓存. 什么是字符流缓冲区? 善于使用字符流缓冲区,减轻负担,提高下 ...
- pat1046. Shortest Distance (20)
1046. Shortest Distance (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue The ...
- matlab 摘要
matlab中的向量与矩阵 如果定义一个A = [1, 2, 3]; 则A为一个行向量 但是A(:)返回的是一个列向量 关于函数的返回值 在function [a, b, c] = fit_quadr ...
- .NET通过PowerShell操作ExChange为用户开通邮箱教程
转:http://www.cnblogs.com/gongguo/archive/2012/03/12/2392049.html =================================== ...
- mysql-查询的案例
查询每个专业的男生人数和女生人数分别是多少 #方式一: select count(*) 个数,sex,majorid from student group by sex,majorid; #方式二: ...
- JavaScript new 操作符 OOP(一)
什么是对象 对象是单个实物的抽象,通常需要一个模板,表示某一类实物的共同特征,然后对象根据这个模板生成. 对象是一个容器,封装了属性(property)和方法(method),属性是对象的状态, ...
- Flask文件目录----- auth/blog 文件
import functools from flask import (Blueprint, flash, g, redirect, render_template, url_for, request ...