Spaces:
Running
Running
github-actions[bot]
commited on
Commit
·
bf38626
1
Parent(s):
9d2e866
Update from GitHub Actions
Browse files- src/index.ts +37 -31
src/index.ts
CHANGED
@@ -69,14 +69,14 @@ async function getReCaptchaToken(page: Page): Promise<string> {
|
|
69 |
return page.evaluate(() => {
|
70 |
return new Promise<string>((resolve, reject) => {
|
71 |
// @ts-ignore
|
72 |
-
window.grecaptcha.ready(function
|
73 |
// @ts-ignore
|
74 |
grecaptcha.execute(
|
75 |
RECAPTCHA_SITE_KEY,
|
76 |
{ action: 'copilot' },
|
77 |
-
).then(function
|
78 |
resolve(token)
|
79 |
-
}).catch(function
|
80 |
reject(error)
|
81 |
});
|
82 |
});
|
@@ -101,12 +101,12 @@ async function handleRequest(url: string, method: string, headers: any, body?: a
|
|
101 |
'cf-ray', 'cf-visitor', 'cf-worker', 'x-direct-url',
|
102 |
'x-forwarded-for', 'x-forwarded-port', 'x-forwarded-proto'
|
103 |
];
|
104 |
-
|
105 |
headersToRemove.forEach(header => delete filteredHeaders[header]);
|
106 |
filteredHeaders['user-agent'] = userAgent;
|
107 |
|
108 |
console.log('处理请求:', method, url, filteredHeaders, body);
|
109 |
-
|
110 |
// 设置请求拦截器
|
111 |
await page.route('**/*', async (route: Route) => {
|
112 |
const request = route.request();
|
@@ -128,7 +128,7 @@ async function handleRequest(url: string, method: string, headers: any, body?: a
|
|
128 |
// 配置页面请求选项
|
129 |
const response = await page.goto(url, {
|
130 |
waitUntil: 'domcontentloaded', // 改为更快的加载策略
|
131 |
-
timeout:
|
132 |
});
|
133 |
|
134 |
if (!response) {
|
@@ -136,7 +136,7 @@ async function handleRequest(url: string, method: string, headers: any, body?: a
|
|
136 |
}
|
137 |
|
138 |
// 等待页面加载完成,使用更短的超时时间
|
139 |
-
await page.waitForLoadState('networkidle', { timeout:
|
140 |
console.log('等待页面加载超时,继续处理');
|
141 |
});
|
142 |
|
@@ -182,11 +182,11 @@ function parseCookies(cookieString: string) {
|
|
182 |
return cookieString.split(';')
|
183 |
.map(cookie => {
|
184 |
const [name, value] = cookie.trim().split('=');
|
185 |
-
return {
|
186 |
-
name,
|
187 |
-
value,
|
188 |
-
domain: 'www.genspark.ai',
|
189 |
-
path: '/'
|
190 |
};
|
191 |
})
|
192 |
.filter(cookie => cookie.name && cookie.value);
|
@@ -214,53 +214,59 @@ app.get('/genspark', async (c) => {
|
|
214 |
|
215 |
let page = null;
|
216 |
let error = null;
|
217 |
-
|
218 |
try {
|
219 |
gensparkContext = await initGensparkContext();
|
220 |
-
|
221 |
// 设置cookies
|
222 |
if (cookies.length > 0) {
|
223 |
await gensparkContext.clearCookies();
|
224 |
await gensparkContext.addCookies(cookies);
|
225 |
}
|
226 |
-
|
|
|
|
|
|
|
|
|
227 |
page = await gensparkContext.newPage();
|
228 |
-
|
229 |
// 导航到Genspark页面
|
230 |
await page.goto(GENSPARK_URL, {
|
231 |
waitUntil: 'networkidle',
|
232 |
timeout: 30000 // 30秒超时,更合理
|
233 |
});
|
|
|
234 |
// 等待页面加载完成
|
235 |
-
await page.waitForTimeout(
|
|
|
236 |
// 获取reCAPTCHA令牌
|
237 |
const token = await getReCaptchaToken(page);
|
238 |
-
|
239 |
if (!token) {
|
240 |
return c.json({ code: 500, message: '获取令牌失败:令牌为空' });
|
241 |
}
|
242 |
-
|
243 |
-
return c.json({
|
244 |
-
code: 200,
|
245 |
-
message: '获取令牌成功',
|
246 |
-
token: token
|
247 |
});
|
248 |
} catch (e) {
|
249 |
error = e
|
250 |
console.error('获取令牌失败:', e);
|
251 |
-
return c.json({
|
252 |
-
code: 500,
|
253 |
-
message: `获取令牌失败: ${e instanceof Error ? e.message : '未知错误'}`
|
254 |
});
|
255 |
} finally {
|
256 |
if (page) {
|
257 |
-
await page.close().catch(() => {
|
258 |
}
|
259 |
-
|
260 |
// 不要在每次请求后关闭上下文,保持它以便重用
|
261 |
// 只有在出错时才重置上下文
|
262 |
if (error && gensparkContext) {
|
263 |
-
await gensparkContext.close().catch(() => {
|
264 |
gensparkContext = null;
|
265 |
}
|
266 |
}
|
@@ -304,12 +310,12 @@ app.all('*', async (c) => {
|
|
304 |
// 清理函数
|
305 |
async function cleanup() {
|
306 |
if (gensparkContext) {
|
307 |
-
await gensparkContext.close().catch(() => {
|
308 |
gensparkContext = null;
|
309 |
}
|
310 |
|
311 |
if (browser) {
|
312 |
-
await browser.close().catch(() => {
|
313 |
browser = null;
|
314 |
}
|
315 |
process.exit(0)
|
|
|
69 |
return page.evaluate(() => {
|
70 |
return new Promise<string>((resolve, reject) => {
|
71 |
// @ts-ignore
|
72 |
+
window.grecaptcha.ready(function() {
|
73 |
// @ts-ignore
|
74 |
grecaptcha.execute(
|
75 |
RECAPTCHA_SITE_KEY,
|
76 |
{ action: 'copilot' },
|
77 |
+
).then(function(token: string) {
|
78 |
resolve(token)
|
79 |
+
}).catch(function(error: Error) {
|
80 |
reject(error)
|
81 |
});
|
82 |
});
|
|
|
101 |
'cf-ray', 'cf-visitor', 'cf-worker', 'x-direct-url',
|
102 |
'x-forwarded-for', 'x-forwarded-port', 'x-forwarded-proto'
|
103 |
];
|
104 |
+
|
105 |
headersToRemove.forEach(header => delete filteredHeaders[header]);
|
106 |
filteredHeaders['user-agent'] = userAgent;
|
107 |
|
108 |
console.log('处理请求:', method, url, filteredHeaders, body);
|
109 |
+
|
110 |
// 设置请求拦截器
|
111 |
await page.route('**/*', async (route: Route) => {
|
112 |
const request = route.request();
|
|
|
128 |
// 配置页面请求选项
|
129 |
const response = await page.goto(url, {
|
130 |
waitUntil: 'domcontentloaded', // 改为更快的加载策略
|
131 |
+
timeout: 60000 // 60秒超时,更合理的值
|
132 |
});
|
133 |
|
134 |
if (!response) {
|
|
|
136 |
}
|
137 |
|
138 |
// 等待页面加载完成,使用更短的超时时间
|
139 |
+
await page.waitForLoadState('networkidle', { timeout: 5000 }).catch(() => {
|
140 |
console.log('等待页面加载超时,继续处理');
|
141 |
});
|
142 |
|
|
|
182 |
return cookieString.split(';')
|
183 |
.map(cookie => {
|
184 |
const [name, value] = cookie.trim().split('=');
|
185 |
+
return {
|
186 |
+
name,
|
187 |
+
value,
|
188 |
+
domain: 'www.genspark.ai',
|
189 |
+
path: '/'
|
190 |
};
|
191 |
})
|
192 |
.filter(cookie => cookie.name && cookie.value);
|
|
|
214 |
|
215 |
let page = null;
|
216 |
let error = null;
|
217 |
+
|
218 |
try {
|
219 |
gensparkContext = await initGensparkContext();
|
220 |
+
|
221 |
// 设置cookies
|
222 |
if (cookies.length > 0) {
|
223 |
await gensparkContext.clearCookies();
|
224 |
await gensparkContext.addCookies(cookies);
|
225 |
}
|
226 |
+
|
227 |
+
|
228 |
+
//等待一段时间
|
229 |
+
await new Promise((resolve) => setTimeout(resolve, 1000));
|
230 |
+
|
231 |
page = await gensparkContext.newPage();
|
232 |
+
|
233 |
// 导航到Genspark页面
|
234 |
await page.goto(GENSPARK_URL, {
|
235 |
waitUntil: 'networkidle',
|
236 |
timeout: 30000 // 30秒超时,更合理
|
237 |
});
|
238 |
+
|
239 |
// 等待页面加载完成
|
240 |
+
await page.waitForTimeout(1000);
|
241 |
+
|
242 |
// 获取reCAPTCHA令牌
|
243 |
const token = await getReCaptchaToken(page);
|
244 |
+
|
245 |
if (!token) {
|
246 |
return c.json({ code: 500, message: '获取令牌失败:令牌为空' });
|
247 |
}
|
248 |
+
|
249 |
+
return c.json({
|
250 |
+
code: 200,
|
251 |
+
message: '获取令牌成功',
|
252 |
+
token: token
|
253 |
});
|
254 |
} catch (e) {
|
255 |
error = e
|
256 |
console.error('获取令牌失败:', e);
|
257 |
+
return c.json({
|
258 |
+
code: 500,
|
259 |
+
message: `获取令牌失败: ${e instanceof Error ? e.message : '未知错误'}`
|
260 |
});
|
261 |
} finally {
|
262 |
if (page) {
|
263 |
+
await page.close().catch(() => {});
|
264 |
}
|
265 |
+
|
266 |
// 不要在每次请求后关闭上下文,保持它以便重用
|
267 |
// 只有在出错时才重置上下文
|
268 |
if (error && gensparkContext) {
|
269 |
+
await gensparkContext.close().catch(() => {});
|
270 |
gensparkContext = null;
|
271 |
}
|
272 |
}
|
|
|
310 |
// 清理函数
|
311 |
async function cleanup() {
|
312 |
if (gensparkContext) {
|
313 |
+
await gensparkContext.close().catch(() => {});
|
314 |
gensparkContext = null;
|
315 |
}
|
316 |
|
317 |
if (browser) {
|
318 |
+
await browser.close().catch(() => {});
|
319 |
browser = null;
|
320 |
}
|
321 |
process.exit(0)
|