Lines 467-507javascript
467 await page.reload({ waitUntil: 'networkidle2', timeout: loginInfo.timeout });
468 if (loginInfo.loginRequired && loginInfo.loginSelectors.successSelector) {
469 const success = await this.resolveShadowDom(page, loginInfo.loginSelectors.shadowDomSelectors, loginInfo.loginSelectors.successSelector);
471 throw new Error('Session invalid, login required');
475 async performLogin(page, uri, loginInfo) {
476 let lastError = null;
477 for (let attempt = 1; attempt <= loginInfo.retries; attempt++) {
479 await page.goto(`${uri}${loginInfo.loginPagePath}`, { waitUntil: 'networkidle2', timeout: loginInfo.timeout });
480 const usernameInput = await this.resolveShadowDom(page, loginInfo.loginSelectors.shadowDomSelectors, loginInfo.loginSelectors.usernameSelector);
481 const passwordInput = await this.resolveShadowDom(page, loginInfo.loginSelectors.shadowDomSelectors, loginInfo.loginSelectors.passwordSelector);
482 const submitButton = await this.resolveShadowDom(page, loginInfo.loginSelectors.shadowDomSelectors, loginInfo.loginSelectors.submitSelector);
483 if (!usernameInput || !passwordInput || !submitButton) {
484 throw new Error(`Failed to locate login form elements ` +
485 `(username=${!!usernameInput}, password=${!!passwordInput}, submit=${!!submitButton}). ` +
486 `Selectors: username='${loginInfo.loginSelectors.usernameSelector}', ` +
487 `password='${loginInfo.loginSelectors.passwordSelector}', ` +
MediumSecret Pattern
Package contains a possible secret pattern.
dist-server/engine/connector/headless-connector.jsView on unpkg · L487 488 `submit='${loginInfo.loginSelectors.submitSelector}'. ` +
489 `사이트 폼 변경 가능성 — Connection params 의 *Selector 값을 실제 폼에 맞춰 덮어쓰세요.`);
491 await usernameInput.type(loginInfo.username);
492 await passwordInput.type(loginInfo.password);
493 var loginApiUrl = loginInfo.loginApiUrl ||
494 (await page.evaluate(button => {
495 const form = button.closest('form');
496 return form ? form.action : null;
498 if (loginApiUrl && !loginApiUrl.startsWith('http')) {
499 loginApiUrl = `${uri}${loginApiUrl}`;
502 throw new Error('❌ Unable to detect login API URL!');
504 console.log('✅ Detected login API URL:', loginApiUrl);
505 const [response] = await Promise.all([
506 page.waitForResponse(response => {
507 const url = response.url();