All Articles

chromedp

about

Chromedpは、Chrome DevTools Protocolと対話するための高速でシンプルな方法で 他の実装に見られるようなseleniumやphantomjsなどの外部依存がない これは、軽量なGoの実装で、必要なのは、Chromeがインストールされていることだけ。

get text value

BySearch は、DOM.performSearch で要素を選択するための要素検索オプション。コマンドで要素を選択するオプションです。プレーンテキスト、CSS セレクタ、XPath クエリのいずれかでノードにマッチする。

var res string
err := chromedp.Run(ctx,
  chromedp.Navigate(`https://smith-30.work/`),
  chromedp.Text(`#gatsby-focus-wrapper > div > div.Sidebar-module--sidebar--X4z2p > div > div:nth-child(1) > p`, &res, chromedp.NodeVisible, chromedp.BySearch),
)
if err != nil {
  log.Fatal(err)
}

output

2021/07/18 16:53:53 Software engineer at Tokyo.

screen shot

var buf []byte
if err := chromedp.Run(ctx, elementScreenshot(`<url>`, `<class|id|xpath>`, &buf)); err != nil {
  log.Fatal(err)
}
if err := ioutil.WriteFile("<filepath>", buf, 0o644); err != nil {
  log.Fatal(err)
}

click and move page

// navigate to a page, wait for an element, click
var example string
err := chromedp.Run(ctx,
  chromedp.Navigate(`https://smith-30.work/`),
  // wait for footer element is visible (ie, page is loaded)
  chromedp.WaitVisible(`//*[@id="gatsby-focus-wrapper"]/div/div[2]/div/div`),
  // find and click "Expand All" link
  chromedp.Click(`//*[@id="gatsby-focus-wrapper"]/div/div[2]/div/div/div[1]/div[1]/h2/a`, chromedp.NodeVisible),
  // retrieve the value of the textarea
  chromedp.Text(`#github-の-feature-flag-について`, &example, chromedp.NodeVisible, chromedp.ByID),
  // chromedp.Text(`#github-の-feature-flag-について`, &example),
)
if err != nil {
  log.Fatal(err)
}
log.Printf("get value :\n%s", example)

output

2021/07/18 16:53:53 Github の feature flag について

aws lambda

https://github.com/chromedp/chromedp/issues/298

↑で紹介されてたけど path 見つからずに error puppeteer と一緒に使う layer 設定してみたけどだめだった