Spaces:
Paused
Paused
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)
|