zoukankan      html  css  js  c++  java
  • chromedp自动启动为headless模式

     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 }

  • 相关阅读:
    未能加载文件或程序集“file:///C:Program Files (x86)SAP BusinessObjectsCrystal Reports for .NET Framework 4.0
    iwms后台出现从客户端(ctl00$cphMain$logo="<img src="pic/logo.g...")中检测到有潜在危险的 Request.Form 值。错误解决方法
    Socket层实现系列 — accept()的实现(二)
    Socket层实现系列 — accept()的实现(一)
    Socket层实现系列 — getsockname()和getpeername()的实现
    洛谷1279 字串距离
    poj 2411
    poj 2411
    noip提高组 2010 关押罪犯 (洛谷1525)
    二分图匹配 (匈牙利算法) 洛谷3386
  • 原文地址:https://www.cnblogs.com/midnight/p/10384699.html
Copyright © 2011-2022 走看看