So far in this series, we only visited one page and took a screenshot or extracted its data. But you can actually navigate a page by clicking on elements, typing in fields and hitting keys.
So let's make the following plan:
We want to
- visit the dev.to homepage
- search for "puppeteer navigating" to find some articles about our current topic
- and click on that very article
On our way, we'll take a screenshot of every step.
-
home.png
for the homepage -
search-results.png
for the search results page - and
article.png
for this article
And this is how it's done:
// npm i puppeteer const puppeteer = require('puppeteer'); // we're using async/await - so we need an async function, that we can run const run = async () => { const browser = await puppeteer.launch(); const page = await browser.newPage(); // let's navigate to the dev.to homepage await page.goto('https://dev.to'); // and let's take a screenshot await page.screenshot({ path: 'home.png', }); // and enter "Puppeteer navigating" in the search input field await page.type('#nav-search', 'Puppeteer navigating'); // there's no search button, so we have to trigger the search by hitting the "Enter" key await page.type('#nav-search', String.fromCharCode(13)); // let's wait until the search results are loaded await page.waitForSelector( '.stories-search .single-article .index-article-link' ); // and take a screenshot of the search results await page.screenshot({ path: 'search_results.png', }); // select an article and click on the headline // if there are multiple elements satisfying the selector, the first one will be clicked await page.click('.index-article-link h3'); // this time let's wait 2 seconds, which we assume is enough time for the page to load await page.waitFor(2000); // and take another screenshot await page.screenshot({ path: 'article.png', }); // we're done; close the browser await browser.close(); }; // run the async function run();
Top comments (0)