File size: 2,272 Bytes
0edf4c9
1dd7887
62c2836
1dd7887
d7c3d87
 
 
 
 
 
 
 
 
 
 
 
 
 
10ec244
62c2836
 
 
 
 
d24869c
62c2836
d24869c
62c2836
d7c3d87
62c2836
 
 
 
 
 
10ec244
d7c3d87
 
 
62c2836
 
 
 
 
d7c3d87
1dd7887
62c2836
d24869c
62c2836
 
 
 
 
 
 
 
 
 
10ec244
62c2836
10ec244
 
 
 
1dd7887
10ec244
1dd7887
b29960a
0edf4c9
10ec244
0edf4c9
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
const http = require('http');
const puppeteer = require('puppeteer');
const urlModule = require('url');

// 用于存储浏览器实例,避免每次请求都重新启动浏览器
let browser;

const initBrowser = async () => {
    browser = await puppeteer.launch({
                headless: true,
                args: ["--no-sandbox"],
                executablePath: '/app/chrome/chrome-linux64/chrome'
            });
};

initBrowser();
let number = 0

const server = http.createServer(async (req, res) => {
    const parsedUrl = urlModule.parse(req.url, true); // 第二个参数为true表示解析查询参数
    const pathname = parsedUrl.pathname;
    console.log(pathname)
    const query = parsedUrl.query;
    console.log(query)
    
    if (pathname === '/screenshot' && req.method.toUpperCase() === 'GET') {
        console.log(number)
        const targetUrl = query.url;
        console.log(targetUrl)
        if (!targetUrl) {
            res.statusCode = 400;
            res.end('Missing url parameter');
            return;
        }

        try {
            if (!browser) {
                await initBrowser();
            }
            try {
                const page = await browser.newPage();
                // 这里确保传入完整协议的网址,比如 http:// 或 https:// 开头的
                await page.goto(targetUrl);
                const screenshotBuffer = await page.screenshot();
                await page.close();

                res.statusCode = 200;
                number++
                res.setHeader('Content-Type', 'image/png');
                res.end(screenshotBuffer);
            } catch (pageError) {
                console.error('Error accessing page:', pageError);
                await browser.close();
                res.statusCode = 500;
                res.end('Error accessing page');
            }
        } catch (launchError) {
            console.error('Error launching browser:', launchError);
            res.statusCode = 500;
            res.end('Error launching browser');
        }
    } else {
        res.statusCode = 404;
        res.end('Not Found');
    }
});

const port = process.env.PORT || 7860;
server.listen(port, () => {
    console.log(`Server running on port ${port}`);
});