# puppeteer

***

**1. Web Scraping (Basic)**

```js
const puppeteer = require('puppeteer');

async function scrapeWebpage() {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://example.com');
  const title = await page.$eval('h1', h1 => h1.innerText);
  browser.close();
  return title;
}
```

**2. Web Scraping (Advanced)**

```js
const puppeteer = require('puppeteer');

async function scrapeArticles() {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://example.com/articles');
  const titles = await page.$$eval('.article-title', titles => titles.map(h3 => h3.innerText));
  browser.close();
  return titles;
}
```

**3. UI Testing (Visual)**

```js
const puppeteer = require('puppeteer');
const expect = require('chai').expect;

describe('Web Application Visual Testing', () => {
  it('should render correctly', async () => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.goto('https://example.com');
    const screenshot = await page.screenshot();
    expect(screenshot).to.matchImageSnapshot();
    browser.close();
  });
});
```

**4. UI Testing (Interaction)**

```js
const puppeteer = require('puppeteer');

async function testFormSubmission() {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://example.com/form');
  await page.type('input[name="name"]', 'John Smith');
  await page.click('button[type="submit"]');
  const url = await page.url();
  browser.close();
  expect(url).to.equal('https://example.com/success');
}
```

**5. PDF Generation**

```js
const puppeteer = require('puppeteer');

async function generatePDF() {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://example.com/article');
  const pdf = await page.pdf();
  browser.close();
  return pdf;
}
```

**6. Image Capture**

```js
const puppeteer = require('puppeteer');

async function captureScreenshot() {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://example.com');
  const screenshot = await page.screenshot();
  browser.close();
  return screenshot;
}
```

**7. Geolocation Simulation**

```js
const puppeteer = require('puppeteer');

async function simulateGeolocation() {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://example.com/location');
  await page.setGeolocation({ longitude: 48.858, latitude: 2.294 });
  const location = await page.evaluate(() => navigator.geolocation.getCurrentPosition(position => position));
  browser.close();
  return location;
}
```

**8. Proxy Usage**

```js
const puppeteer = require('puppeteer');

async function useProxy() {
  const browser = await puppeteer.launch({
    args: ['--proxy-server=http://127.0.0.1:8080']
  });
  const page = await browser.newPage();
  await page.goto('https://example.com');
  const ip = await page.evaluate(() => fetch('https://api.ipify.org?format=json').then(res => res.json()).then(data => data.ip));
  browser.close();
  return ip;
}
```

**9. Authentication**

```js
const puppeteer = require('puppeteer');

async function authenticate() {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://example.com/login');
  await page.type('input[name="username"]', 'user');
  await page.type('input[name="password"]', 'pass');
  await page.click('button[type="submit"]');
  const cookies = await page.cookies();
  browser.close();
  return cookies;
}
```

**10. Page Load Optimization**

```js
const puppeteer = require('puppeteer');

async function optimizePageLoad() {
  const browser = await puppeteer.launch({
    devtools: true,
    args: ['--disable-javascript', '--disable-images', '--disable-css']
  });
  const page = await browser.newPage();
  await page.goto('https://example.com');
  await page.setViewport({ width: 1200, height: 800 });
  browser.close();
}
```

**11. Data Mining**

```js
const puppeteer = require('puppeteer');

async function mineData() {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://example.com/items');
  const items = await page.$$eval('.item', items => items.map(item => ({
    name: item.querySelector('.name').innerText,
    price: parseFloat(item.querySelector('.price').innerText),
  })));
  browser.close();
  return items;
}
```

**12. Price Comparison**

```js
const puppeteer = require('puppeteer');

async function comparePrices() {
  const browser = await puppeteer.launch();
  const pages = [];
  pages.push(await browser.newPage());
  pages.push(await browser.newPage());
  page1.goto('https://example1.com/item');
  page2.goto('https://example2.com/item');
  const prices = await Promise.all(pages.map(page => page.$eval('.price', price => parseFloat(price.innerText))));
  browser.close();
  return prices;
}
```

**13. E-commerce Automation**

```js
const puppeteer = require('puppeteer');

async function automateEcommerce() {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://example.com/products');
  await page.click('.product-add-to-cart-button');
  await page.click('.cart-checkout-button');
  await page.type('input[name="name"]', 'John Smith');
  await page.type('input[name="address"]', '123 Main Street');
  await page.type('input[name="credit-card"]', '1234567890123456');
  await page.click('button[type="submit"]');
  browser.close();
}
```

**14. Websocket Testing**

```js
const puppeteer = require('puppeteer');

async function testWebsockets() {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('wss://example.com');
  page.on('websocket', ws => ws.on('message', msg => console.log(`Received message: ${msg}`)));
  browser.close();
}
```

**15. WebRTC Testing**

```js
const puppeteer = require('puppeteer');

async function testWebRTC() {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://example.com/webrtc');
  const offer = await page.evaluate(() => RTCPeerConnection.generateOffer());
  const answer = await page.evaluate((offer) => new RTCPeerConnection().setRemoteDescription(offer).then(() => RTCPeerConnection.generateAnswer()), offer);
  browser.close();
  return { offer, answer };
}
```

**16. Browser Automation with Headless Mode**

```js
const puppeteer = require('puppeteer');

async function automateBrowserHeadless() {
  const browser = await puppeteer.launch({ headless: true });
  const page = await browser.newPage();
  await page.goto('https://example.com');
  const title = await page.$eval('h1', h1 => h1.innerText);
  browser.close();
  return title;
}
```

**17. Mocking Network Requests**

```js
const puppeteer = require('puppeteer');

async function mockNetworkRequests() {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.setRequestInterception(true);
  page.on('request', request => request.respond({ content: 'Mocked Response' }));
  await page.goto('https://example.com');
  browser.close();
}
```

**18. Accessing Browser Logs**

```js
const puppeteer = require('puppeteer');

async function accessBrowserLogs() {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://example.com/console');
  const logs = await browser.logs();
  console.log(logs[0].messages[0].text);
  browser.close();
}
```

**19. Scraping Infinite Scroll Pages**

```js
const puppeteer = require('puppeteer');

async function scrapeInfiniteScroll() {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://example.com/infinite-scroll');
  const results = [];
  while (true) {
    const newResults = await page.$$eval('.item', items => items.map(item => item.innerText));
    results.push(...newResults);
    const button = await page.$('.load-more-button');
    if (!button) break;
    await button.click();
    await page.waitForTimeout(500);
  }
  browser.close();
  return results;
}
```

**20. Emulation and Geolocation**

```js
const puppeteer = require('puppeteer');

async function emulateAndGeolocate() {
  const browser = await puppeteer.launch({ headless: true });
  const page = await browser.newPage();
  await page.setUserAgent('Mozilla/5.0 (iPhone; CPU iPhone OS 13_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.1 Mobile/15E148 Safari/604.1');
  await page.setGeolocation({ latitude: 48.858, longitude: 2.294 });
  await page.goto('https://example.com');
  browser.close();
}
```

**21. Captcha Solving**

```js
const puppeteer = require('puppeteer');
const twocaptcha = require('2captcha');

async function solveCaptcha() {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://example.com/captcha');
  const siteKey = await page.$eval('div[data-sitekey]', el => el.getAttribute('data-sitekey'));
  const twocaptchaInstance = new twocaptcha.Client('YOUR_2CAPTCHA_KEY');
  const captchaSolution = await twocaptchaInstance.decodeRecaptchaV2(siteKey, page.url());
  await page.type('input[data-callback]', captchaSolution.code);
  await page.click('button[type="submit"]');
  browser.close();
}
```

**22. Browser Extensions**

```js
const puppeteer = require('puppeteer');

async function installExtension() {
  const browser = await puppeteer.launch({
    args: ['--disable-extensions-except=./extension.crx', '--load-extension=./extension.crx']
  });
  const page = await browser.newPage();
  await page.goto('https://example.com');
  browser.close();
}
```

**23. Mobile Emulation**

```js
const puppeteer = require('puppeteer');

async function emulateMobile() {
  const browser = await puppeteer.launch({ headless: true });
  const page = await browser.newPage();
  await page.emulate(puppeteer.devices['iPhone 11']);
  await page.goto('https://example.com');
  browser.close();
}
```

**24. PDF Generation with Headers and Footers**

```js
const puppeteer = require('puppeteer');

async function generatePDFFromHeadless() {
  const browser = await puppeteer.launch({ headless: true });
  const page = await browser.newPage();
  await page.goto('https://example.com/article');
  const pdf = await page.pdf({
    headerTemplate: '<div style="font-size: 12px; text-align: center;">Header</div>',
    footerTemplate: '<div style="font-size: 12px; text-align: center;">Footer</div>',
  });
  browser.close();
  return pdf;
}
```

**25. Web Security Audits**

```js
const puppeteer = require('puppeteer');

async function auditWebsite() {
  const browser = await puppeteer.launch({ headless: false });
  const page = await browser.newPage();
  await page.goto('https://example.com');
  const results = await page.lighthouse();
  console.log(results.report);
  browser.close();
}
```
