Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save YordanGeorgiev/faed32b2cf6aa02c8dcb2024ecf059d6 to your computer and use it in GitHub Desktop.
Save YordanGeorgiev/faed32b2cf6aa02c8dcb2024ecf059d6 to your computer and use it in GitHub Desktop.
Click link by text in Puppeteer
const puppeteer = require('puppeteer');
const escapeXpathString = str => {
const splitedQuotes = str.replace(/'/g, `', "'", '`);
return `concat('${splitedQuotes}', '')`;
};
const clickByText = async (page, text) => {
const escapedText = escapeXpathString(text);
const linkHandlers = await page.$x(`//a[contains(text(), ${escapedText})]`);
if (linkHandlers.length > 0) {
await linkHandlers[0].click();
} else {
throw new Error(`Link not found: ${text}`);
}
};
const run = async () => {
const browser = await puppeteer.launch({args: ['--no-sandbox'], headless: true});
const page = await browser.newPage();
await page.goto('https://en.wikipedia.org/wiki/List_of_The_Sandman_characters');
await clickByText(page, `Fiddler's Green`);
await page.waitForNavigation({waitUntil: 'load'});
console.log("Current page:", page.url());
return browser.close();
};
const logErrorAndExit = err => {
console.log(err);
process.exit();
};
run().catch(logErrorAndExit);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment