惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Recent Announcements
Recent Announcements
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
B
Blog
T
The Blog of Author Tim Ferriss
J
Java Code Geeks
腾讯CDC
D
Docker
G
Google Developers Blog
D
DataBreaches.Net
雷峰网
雷峰网
Blog — PlanetScale
Blog — PlanetScale
S
SegmentFault 最新的问题
The Cloudflare Blog
有赞技术团队
有赞技术团队
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Stack Overflow Blog
Stack Overflow Blog
大猫的无限游戏
大猫的无限游戏
量子位
美团技术团队
aimingoo的专栏
aimingoo的专栏
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Engineering at Meta
Engineering at Meta
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - 深夜

AMIS中的组件添加图标的一些注意点。 同一个浏览器多次请求竟然发现是串行执行的,见鬼了。 VSCode 运行go test显示打印日志 现在CSDN真的很讨厌,百度出来都是一堆CSDN的东西。 VScode中的golang代码规范太严格,怎么处理。 chromedp下载文件的方法,备忘一下。 vue项目里的日期格式化(摘录) 深入分析 Java 中的中文编码问题 高亮显示web页表格行 tomcat作为windows服务的参数配置,特别是PermSize的设置 webwork和spring多配置文件的方法 - 深夜 - 博客园 webwork的interceptor来实现ajax功能(buffalo) 用C#实现BHO(Brower Helper Object) 用Sitemesh控制页面布局 关于WebWork2中的中文问题 tomcat中的几点配置说明 使用Filter实现静态HTML缓冲(一种折中方法) 关于DirectX中的DirectShow介绍 基于Delphi的VFW视频捕获程序的开发
chromedp自动启动为headless模式
深夜 · 2019-02-15 · via 博客园 - 深夜
 1 // Command click is a chromedp example demonstrating how to use a selector to
 2 // click on an element.
 3 package main
 4 
 5 import (
 6     "context"
 7     "fmt"
 8     "github.com/chromedp/cdproto/page"
 9     "github.com/chromedp/chromedp"
10     "github.com/chromedp/chromedp/runner"
11     "log"
12     "os"
13     "time"
14 )
15 
16 func main() {
17     var err error
18 
19     // create context
20     ctxt, cancel := context.WithCancel(context.Background())
21     defer cancel()
22 
23     // create chrome instance
24     //c, err := chromedp.New(ctxt, chromedp.WithLog(log.Printf))
25     //if err != nil {
26     //    log.Fatal(err)
27     //}
28 
29     c, err := NewHeadless(ctxt, `https://xxx.xx`)
30     if err != nil {
31         log.Fatalf("new headless: %s",err)
32     }
33 
34     // run task list
35     err = c.Run(ctxt, click())
36     if err != nil {
37         log.Fatalf("task err: %s",err)
38     }
39 
40 
41     // shutdown chrome
42     err = c.Shutdown(ctxt)
43     if err != nil {
44         log.Fatalf("shutdown err: %s",err)
45     }
46 
47     // wait for chrome to finish
48     err = c.Wait()
49     if err != nil {
50         log.Fatalf("wait err: %s",err)
51     }
52 }
53 
54 func click() chromedp.Tasks {
55     //url := `https://free-ss.site`
56     //sect := "div.main > div > table > tbody >tr:nth-child(2) > td:nth-child(9) > a"
57     sect := `//a[@href="v/443.json"]`
58     wd,_ := os.Getwd()
59     fmt.Println(wd)
60     return chromedp.Tasks{
61         //chromedp.Navigate(url),
62         chromedp.WaitVisible(sect),
63         page.SetDownloadBehavior(page.SetDownloadBehaviorBehaviorAllow).WithDownloadPath(wd),
64         chromedp.Click(sect, chromedp.NodeVisible),
65         chromedp.Sleep(3 * time.Second),
66     }
67 }
68 
69 
70 // NewHeadless 创建headless chrome实例
71 func NewHeadless(ctx context.Context, starturl string) (*chromedp.CDP, error) {
72     // runner.Flag设置启动headless chrome时的命令行参数
73     // Windows用户需要设置runner.Flag("disable-gpu", true),具体信息参见文档的FAQ
74     run, err := runner.New(runner.Flag("headless", false),runner.StartURL(starturl))
75 
76     if err != nil {
77         return nil, err
78     }
79 
80     // run.Start启动实例
81     err = run.Start(ctx)
82     if err != nil {
83         return nil, err
84     }
85 
86     // 默认情况chromedp会输出大量log,因为是示例所以选择屏蔽,dropChromeLogs为自定义函数,形式为func(string, ...interface{}){}
87     // 使用runner初始化chromedp实例
88     // 实例在使用完毕后需要调用c.Shutdown()来释放资源
89     //c, err := chromedp.New(ctx, chromedp.WithRunner(run), chromedp.WithErrorf(dropChromeLogs))
90     c, err := chromedp.New(ctx, chromedp.WithRunner(run), chromedp.WithLog(log.Printf))
91     if err != nil {
92         return nil, err
93     }
94 
95     return c, nil
96 }