חיפוש שירות: קבלת מייל יומי מסוכם עם היתרות עו"ש בבנקים
-
@mekev
סיכום השיעורי ביתיש כאן ניואנס אישי
האם הנתון הדרוש הינו היתרה בסיום יום העסקים הקודם
או היתרה הנוכחית המשוערכת בחשבון (כולל פעולות היום)אני למעשה צריך את שניהם
כספיון + familybiz - כרגע אינם תומכים בחשבונות עסקיים (פועלים עסקי דורש אימות נוסף, ומרכנתיל עסקי דורש רק 2 שדות זיהוי)
bizibox - אני משתמש כשנתיים בשירות העסקי שלהם, יש להם ממשק לכל הבנקים (כולל פועלים עסקי)
יש להם אפשרות של עדכון מייל יומי רק לחלק מהבנקים, (התמיכה המעולה שלהם הסבירה לי למה, ואכמ"ל, בנוסף חישוב היתרה אצלהם מתבצע לפי התנועות, ולא לפי יתרת העו"ש בחשבון)הלכתי לגרד עצמאית:
בנק מזרחי - מידע מלא ותקין
בנק פאגי - תנועות יוצא תקין - חסר את הנתוןBalance
בנק מרכנתיל - הקוד בספרייה לעיל תוך רק באתר הרגיל ולא בעסקי
בנק פועלים עסקי - לא מצאתי ספרייה פתוחה פעילה תקינה התומכת בניהול האימות הדו גורמי -
@יהודי-טוב כתב בחיפוש שירות: קבלת מייל יומי מסוכם עם היתרות עו"ש בבנקים:
בכל כניסה זה דורש אימות או רק בפעם הראשונה?
בכל כניסה מתקבל קוקיז התקף ל 8 שעות
-
@mekev כתב בחיפוש שירות: קבלת מייל יומי מסוכם עם היתרות עו"ש בבנקים:
@יהודי-טוב כתב בחיפוש שירות: קבלת מייל יומי מסוכם עם היתרות עו"ש בבנקים:
בכל כניסה זה דורש אימות או רק בפעם הראשונה?
בכל כניסה מתקבל קוקיז התקף ל 8 שעות
ויש שם אימות שאינך רובוט או אימות דו שלבי? או שאפשר להכניס לקוד שם משתמש וסיסמה ולהתחבר עם זה ולקבל את הקוקיז?
-
@צבי-ש
אין בדיקה של רובוט
רק אימות דו שלביאני אוחז פה (שאני לא מצליח לבצע פעולות בדיאלוג)
const puppeteer = require('puppeteer'); (async () => { let browser; try { console.log('Launching browser...'); browser = await puppeteer.launch({ headless: false, defaultViewport: null }); const page = await browser.newPage(); console.log('Navigating to login page...'); const url = 'https://biz2.bankhapoalim.co.il/ng-portals/auth/he/biz-login/authenticate'; await page.goto(url, { waitUntil: 'networkidle2', timeout: 60000 }); console.log('Waiting for username field...'); await page.waitForSelector('#user-code', { visible: true }); console.log('Typing username...'); await page.type('#user-code', 'user', { delay: 100 }); console.log('Typing password...'); await page.type('#password', 'pass', { delay: 100 }); console.log('Clicking login button...'); await page.click('.submit-btn.btn1'); console.log('Waiting for navigation after login...'); await page.waitForNavigation({ waitUntil: 'networkidle2', timeout: 60000 }); console.log('Waiting for OTP input field...'); const otpSelector = 'input[formcontrolname="code"]'; await page.waitForSelector(otpSelector, { visible: true }); console.log('Focusing on OTP input field...'); await page.focus(otpSelector); console.log('Typing OTP code...'); const otpCode = '123456'; for (const char of otpCode) { await page.type(otpSelector, char, { delay: 100 }); await page.waitForTimeout(100); // Small delay between keystrokes } console.log('Clicking submit button for OTP...'); await page.click('.btn3.next'); console.log('Waiting for navigation after OTP...'); await page.waitForNavigation({ waitUntil: 'networkidle2', timeout: 60000 }); console.log('Waiting for account link...'); await page.waitForSelector('#CURRENTAC', { visible: true }); console.log('Clicking on specified link...'); await page.click('#CURRENTAC'); console.log('Done!'); } catch (error) { console.error('An error occurred:', error); } finally { if (browser) { console.log('Closing browser...'); await browser.close(); } } })();
-
@mekev כתב בחיפוש שירות: קבלת מייל יומי מסוכם עם היתרות עו"ש בבנקים:
אני אוחז פה (שאני לא מצליח לבצע פעולות בדיאלוג)
תבדוק שזה לא יושב בתוך iframe.
כי לדוגמא בהתחברות בבנק פאגי ובנק מזרחי, עולה סוג של דיאלוג שזה בiframe ואז אתה צריך למצוא את האלמנט של ה-iframe ואח"כ בתותו את האלמנטים שאתה רוצה.... -
החלק השני של האימות דו שלבי יושב בתוך זה
<div class="modal-content"> <auth-otp-login> <form novalidate="" class="auth-otp-login ng-pristine ng-invalid ng-touched"> <div class="modal-header"> <h3 class="modal-title">פועלים באינטרנט לעסקים</h3> <button type="button" class="btn-close" aria-label="סגור"></button> </div> <div class="modal-body"> <poalim-server-error-messages class="exception-area"></poalim-server-error-messages> <h4>פועלים לשמור על חשבונך</h4> <div>קוד האימות נשלח כעת לסלולרי שלך שמספרו <span class="number">099-******9</span></div> <div>אנא הקלד את הקוד ולחץ 'כניסה לחשבונך'.</div> <div class="verification-code">קוד אימות</div> <input type="text" poalimnumberonly="" formcontrolname="code" class="form-control ng-pristine ng-invalid ng-touched" aria-label="קוד אימות" autocomplete="off"> <div> לא קיבלת את הקוד? לחץ לקבלת הקוד פעם נוספת ב- <button id="sms" type="button" class="btn-link link">SMS</button> או <button type="button" class="btn-link link">בהודעה קולית</button> </div> </div> <div class="modal-footer"> <button type="button" class="btn2">חזור</button> <button type="submit" class="btn3 next" disabled="" aria-disabled="true"> כניסה לחשבונך </button> </div> </form> </auth-otp-login> </div>
-
@מנחם כתב בחיפוש שירות: קבלת מייל יומי מסוכם עם היתרות עו"ש בבנקים:
יש דרך לקלוט את ה-SMS ולהכניס אותו אוטומטית?
אם אתה מעדכן בבנק מספר וירטואלי כמו מספר של ימות המשיח - אתה יכול להגדיר לו שישלח את ההודעה בAPI.
תשמור את זה באיזה DB ומהקוד שמקבל את התנועות תשלוף את זה.
-
@mekev
תנסה להעיף את השורה הזאת..אני רואה שהאימות מתבצע תחת הURL הראשון של הכניסה..
await page.waitForNavigation({ waitUntil: 'networkidle2', timeout: 60000 });
עריכה
בדקתי את הקוד הבא בכניסה לאתר הרגיל של בנק הפועלים כניסה ראשונה ממחשב - שהוא דורש גם אימות OTP.
וזה עבד לי - ראיתי את האינפוטים עם המספרים.
// פתיחת הדפדפן במצב דיבוג (headful) const browser = await puppeteer.launch({ headless: false, // הופך את המצב ל-Headful }); const pages = await browser.pages(); const page = pages[0]; // שימוש בטאב הראשון await page.goto("https://login.bankhapoalim.co.il/ng-portals/auth/he/"); // הזנת מידע לתוך האינפוטים await page.type('#userCode', userCode); // הזנת טקסט לאינפוט הראשון (לפי מזהה id) await page.type('#password', password); // הזנת טקסט לאינפוט השני (לפי מזהה id) // לחיצה על כפתור מסוג submit עם הטקסט "כניסה" await page.evaluate(() => { const button = Array.from(document.querySelectorAll('button[type="submit"]')) .find(el => el.innerText === 'כניסה'); if (button) button.click(); }); await page.waitForSelector('poalim-separated-characters-input'); // רשימת הספרות של הקוד שברצונך להזין const otpCode = ['1', '2', '3', '4', '5']; // הזן את הספרות באינפוטים בהתאמה for (let i = 0; i < otpCode.length; i++) { const selector = `input[data-testid="separated-${i}"]`; // התאמת הסלקטור ל- data-testid await page.focus(selector); // פוקוס על האינפוט המתאים await page.type(selector, otpCode[i]); // הקלד את הספרה }