Navigates to Hacker News, searches for "lightpanda", waits for results, and extracts structured data.

elixir examples/sample.exs

Source

{:ok, session} = LightCDP.start()
{:ok, page} = LightCDP.new_page(session)

:ok = LightCDP.Page.navigate(page, "https://news.ycombinator.com/")
:ok = LightCDP.Page.fill(page, "input[name=\"q\"]", "lightpanda")

:ok =
  LightCDP.Page.wait_for_navigation(page, fn ->
    LightCDP.Page.evaluate(page, "document.querySelector('input[name=\"q\"]').form.submit()")
  end)

:ok = LightCDP.Page.wait_for_selector(page, ".Story_container", timeout: 5_000)

{:ok, results} =
  LightCDP.Page.evaluate(page, """
  Array.from(document.querySelectorAll('.Story_container')).map(row => ({
    title: row.querySelector('.Story_title span')?.textContent || '',
    url: row.querySelector('.Story_title a')?.getAttribute('href') || '',
    meta: Array.from(
      row.querySelectorAll('.Story_meta > span:not(.Story_separator, .Story_comment)')
    ).map(el => el.textContent)
  }));
  """)

LightCDP.stop(session)

See sample.exs for the full runnable script.