File size: 1,465 Bytes
762c6c4
 
940e723
 
 
 
762c6c4
 
940e723
762c6c4
 
 
940e723
 
 
 
762c6c4
 
940e723
762c6c4
940e723
762c6c4
 
940e723
762c6c4
 
 
 
940e723
762c6c4
 
940e723
 
 
762c6c4
940e723
 
 
 
 
 
762c6c4
940e723
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import express from "express";
import { chromium } from "playwright";

const app = express();
app.use(express.json());

app.post("/search", async (req, res) => {
  // Validate query
  const { query } = req.body;
  if (!query) return res.status(400).json({ error: "Missing query" });

  // Start new browser sesion
  let browser;
  try {
    browser = await chromium.launch({ headless: true });
    const context = await browser.newContext({
      userAgent:
        "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
      viewport: { width: 1280, height: 800 },
      locale: "en-US",
    });

    // Open new page with Bing's HTML search endpoint
    const page = await context.newPage();
    await page.goto(
      "https://www.bing.com/search?q=" + encodeURIComponent(query),
      { waitUntil: "domcontentloaded" }
    );
    await page.waitForTimeout(1200 + Math.floor(Math.random() * 800)); // Random delay

    // Retrive text from the results
    const visibleText = await page.evaluate(() => document.body.innerText);
    res.json({ result: visibleText });
  } catch (e) {
    console.error("Playwright error:", e);
    res.status(500).json({ error: e.message });
  } finally {
    if (browser) await browser.close();
  }
});

// Start express server
const PORT = process.env.PLAYWRIGHT_PORT || 5000;
app.listen(PORT, () => {
  console.log(`Playwright service running on port ${PORT}`);
});