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

推荐订阅源

Hugging Face - Blog
Hugging Face - Blog
Jina AI
Jina AI
宝玉的分享
宝玉的分享
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
人人都是产品经理
人人都是产品经理
博客园 - 聂微东
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
J
Java Code Geeks
博客园 - 【当耐特】
小众软件
小众软件
博客园 - Franky
S
SegmentFault 最新的问题
WordPress大学
WordPress大学
雷峰网
雷峰网
The Cloudflare Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
量子位
Last Week in AI
Last Week in AI
博客园_首页
月光博客
月光博客
IT之家
IT之家
阮一峰的网络日志
阮一峰的网络日志
Webroot Blog
Webroot Blog
Stack Overflow Blog
Stack Overflow Blog
腾讯CDC
云风的 BLOG
云风的 BLOG
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
W
WeLiveSecurity
Recent Commits to openclaw:main
Recent Commits to openclaw:main
D
Docker
The Last Watchdog
The Last Watchdog
有赞技术团队
有赞技术团队
Hacker News - Newest:
Hacker News - Newest: "LLM"
D
DataBreaches.Net
S
Security @ Cisco Blogs
Blog — PlanetScale
Blog — PlanetScale
GbyAI
GbyAI
TaoSecurity Blog
TaoSecurity Blog
S
Security Affairs
Y
Y Combinator Blog
O
OpenAI News
罗磊的独立博客
MongoDB | Blog
MongoDB | Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Forbes - Security
Forbes - Security
P
Palo Alto Networks Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
K
Kaspersky official blog
Cloudbric
Cloudbric

博客园 - 深夜

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 }