File size: 2,530 Bytes
412fb79
 
 
 
cacb3d0
412fb79
 
 
 
 
 
 
 
 
 
cb81bde
412fb79
 
 
 
cb81bde
412fb79
 
3890a46
412fb79
 
3890a46
412fb79
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
const express = require('express');
const { chromium } = require('playwright');

const app = express();
const PORT = 7860;

app.get('/scrape', async (req, res) => {
    const url = req.query.url;
    if (!url) return res.status(400).json({ error: 'URL is required' });

    try {
        const 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: 720 },
            javaScriptEnabled: true, 
            bypassCSP: true
        });

        const page = await context.newPage();
        await page.goto(url, { waitUntil: 'load', timeout: 60000 });
        await page.waitForSelector('body');
        
        const html = await page.content();
        await browser.close();

        res.status(200).send(html);
    } catch (error) {
        res.status(500).json({ error: 'Failed to scrape the website', details: error.message });
    }
});

app.get('/bypass-cf-media', async (req, res) => {
    const url = req.query.url;
    if (!url) return res.status(400).json({ error: 'URL is required' });

    try {
        const 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: 720 },
            bypassCSP: true
        });

        const page = await context.newPage();
        await page.goto(url, { waitUntil: 'load', timeout: 60000 });
        await page.waitForSelector('body');
        
        const mediaElement = await page.$('img, video, audio, source');
        if (!mediaElement) {
            await browser.close();
            return res.status(404).json({ error: 'No media found' });
        }
        
        const buffer = await mediaElement.screenshot() || await mediaElement.evaluate(el => el.src);
        await browser.close();
        
        if (typeof buffer === 'string') {
            return res.redirect(buffer);
        }
        
        res.setHeader('Content-Type', 'image/png');
        res.send(buffer);
    } catch (error) {
        res.status(500).json({ error: 'Failed to bypass CF or get media', details: error.message });
    }
});

app.listen(PORT, () => {
    console.log(`Server running on http://localhost:${PORT}`);
});