דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. אינטרנט
  3. קוד Node לקבלת נתונים מבנק הפועלים

קוד Node לקבלת נתונים מבנק הפועלים

מתוזמן נעוץ נעול הועבר אינטרנט
10 פוסטים 3 כותבים 514 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • יהודי טובי מנותק
    יהודי טובי מנותק
    יהודי טוב
    כתב ב נערך לאחרונה על ידי
    #1

    ראיתי את הספריה israeli-bank-scrapers

    התלבטתי אם להשתמש בזה.

    אמרתי שאני ינסה ויראה עד כמה זה מורכב לממש את זה בעצמי.

    תכלס כתבתי את זה עם עזרת GPT, וקיבלתי תוצאה טובה. (יש לי יותר מידע ממה שהם מחזירים, ואני יכול גם להוסיף כל הזמן כל מידע שאני צריך)

    מצרף את הקובץ

    const puppeteer = require('puppeteer');
    const axios = require('axios');
    const fs = require('fs');
    
    const poalim = async (userCode, password, tranStartDate = null, tranEndDate = null) => {//dates in format yyyymmdd
        // פתיחת הדפדפן במצב דיבוג (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.waitForNavigation();
    
        // שליפת עוגיות
        const cookies = await page.cookies();
    
        // יצירת מחרוזת עוגיות עבור בקשות HTTP
        const cookieHeader = cookies.map(cookie => `${cookie.name}=${cookie.value}`).join('; ');
    
        // שליחת בקשה HTTP עם העוגיות
        const accounts = await axios.get('https://login.bankhapoalim.co.il/ServerServices/general/accounts', {
            headers: {
                'Cookie': cookieHeader, // שימוש בעוגיות שהתקבלו
            },
        });
    
    
        // קביעת תאריכים עם ברירת מחדל אם לא סופקו
        const startDate = tranStartDate || new Date(new Date().setFullYear(new Date().getFullYear() - 1)).toISOString().split('T')[0].replace(/-/g, '');
        const endDate = tranEndDate || new Date().toISOString().split('T')[0].replace(/-/g, '');
    
        // עיבוד כל החשבונות במקביל
        const enrichedAccounts = await Promise.all(
            accounts.data.map(async (account) => {
                const accountId = `${account.bankNumber}-${account.branchNumber}-${account.accountNumber}`;
    
                // בקשה לפרטי היתרה והקרדיט
                const metadataPromise = axios.get(
                    `https://login.bankhapoalim.co.il/ServerServices/current-account/composite/balanceAndCreditLimit?accountId=${accountId}&view=details&lang=he`,
                    { headers: { 'Cookie': cookieHeader } }
                );
    
                // בקשה לרשימת תנועות
                const transactionsPromise = axios.get(
                    `https://login.bankhapoalim.co.il/ServerServices/current-account/transactions?accountId=${accountId}&numItemsPerPage=1000&retrievalEndDate=${endDate}&retrievalStartDate=${startDate}&sortCode=1`,
                    { headers: { 'Cookie': cookieHeader } }
                );
    
                // מחכים לשתי הבקשות במקביל
                const [metadataResponse, transactionsResponse] = await Promise.all([metadataPromise, transactionsPromise]);
    
                // החזרת האובייקט המועשר
                return {
                    ...account,
                    metadata: metadataResponse.data,
                    transactions: transactionsResponse.data,
                };
            })
        );
    
        const now = new Date().toISOString().replace(/[-:T]/g, '').slice(0, 8) + '_' + new Date().toTimeString().slice(0, 5).replace(/:/g, '');
    
        // כתיבת התוצאה לקובץ JSON
        fs.writeFileSync(`bank_${now}.json`, JSON.stringify(enrichedAccounts, null, 2));
    
        await page.deleteCookie(...cookies);// מחיקת עוגיות
    
        await browser.close(); // סגירת הדפדפן
    }
    
    poalim('userName', 'password');
    
    
    O תגובה 1 תגובה אחרונה
    4
    • O מנותק
      O מנותק
      one1010
      השיב ליהודי טוב ב נערך לאחרונה על ידי
      #2

      @יהודי-טוב כתב בקוד Node לקבלת נתונים מבנק הפועלים:

      וקיבלתי תוצאה טובה

      אתה מצליח למשוך את המידע בפועל?
      אשמח להבין יותר מה אתה מקבל.

      יהודי טובי תגובה 1 תגובה אחרונה
      0
      • יהודי טובי מנותק
        יהודי טובי מנותק
        יהודי טוב
        השיב לone1010 ב נערך לאחרונה על ידי יהודי טוב
        #3

        @one1010 כתב בקוד Node לקבלת נתונים מבנק הפועלים:

        אתה מצליח למשוך את המידע בפועל?

        כן

        אשמח להבין יותר מה אתה מקבל.

        אני שומר את זה בקובץ json בתיקיה של הפרויקט.

        אתה יכול לעשות עם זה מה שבא לך - ליצור מזה קובץ אקסל, לשלוח מייל, להריץ משימה שתבדוק כל הזמן אם יש נתונים חדשים ותתריע לך על זה וכו'...

        אבל זה כבר לא קשור למשיכת הנתונים מהבנק.

        מה שכתבתי זה לא מוצר שמתאים לצורך ספציפי - אלא רק מושך מהבנק נתונים על החשבון ואתה מחליט מה לעשות עם זה.

        בנוסף שים לב שצריך להתקין את הספריות שאני מייבא.

        O תגובה 1 תגובה אחרונה
        1
        • י מנותק
          י מנותק
          יוס
          כתב ב נערך לאחרונה על ידי
          #4

          @יהודי-טוב זה אמור לעבוד גם מכתובות בחו"ל? (למה אני מקבל 401 Unauthorized)

          מערכת מכירות בכל ערוצי המכירה, טלפון-מייל-ואתר
          שיגור הודעות במחירים המשתלמים ביותר
          לפתיחת מערכת https://app.ipsales.co.il/

          יהודי טובי תגובה 1 תגובה אחרונה
          0
          • O מנותק
            O מנותק
            one1010
            השיב ליהודי טוב ב נערך לאחרונה על ידי
            #5

            @יהודי-טוב אתה יכול לבחור איזה נתונים למשוך?

            תגובה 1 תגובה אחרונה
            0
            • יהודי טובי מנותק
              יהודי טובי מנותק
              יהודי טוב
              השיב ליוס ב נערך לאחרונה על ידי
              #6

              @יוס
              אתה רואה דפדפן שנפתח?
              מה אתה רואה בדפדפן?

              יכול להיות שפעם ראשונה צריך קוד חד"פ.

              תנסה להוסיף אחרי הכניסה את השורות האלו

              const currentUrl = page.url();
              console.log(currentUrl);
              

              אתה אמור לקבל את זה:

              https://login.bankhapoalim.co.il/ng-portals/rb/he/homepage
              

              @one1010
              בדוגמא הזו אני מושך:
              רשימה עם כל החשבונות בנק.
              על כל חשבון פרטים בסיסיים ותנועות (מהשנה האחרונה או תאריכים שצוינו).

              אם אתה רוצה למשוך משהו נוסף אתה יכול לבדוק באתר של הבנק לאיזה כתובת מתבצעת הפניה ולהוסיף את זה לmap שיוסיף את זה עבור כל חשבון.

              O תגובה 1 תגובה אחרונה
              1
              • O מנותק
                O מנותק
                one1010
                השיב ליהודי טוב ב נערך לאחרונה על ידי
                #7

                @יהודי-טוב כתב בקוד Node לקבלת נתונים מבנק הפועלים:

                אתה יכול לבדוק באתר של הבנק לאיזה כתובת מתבצעת הפניה

                איך? בהקלטת תעבורה?

                יהודי טובי תגובה 1 תגובה אחרונה
                0
                • יהודי טובי מנותק
                  יהודי טובי מנותק
                  יהודי טוב
                  השיב לone1010 ב נערך לאחרונה על ידי
                  #8

                  @one1010 כתב בקוד Node לקבלת נתונים מבנק הפועלים:

                  איך? בהקלטת תעבורה?

                  או הקלטת תעבורה או לבדוק בנטוורק.

                  אגב אתה יכול גם לעשות העברות (אם כי - זה בד"כ מצריך קוד חד"פ כל העברה - ככה זה אצלי - ואם כן לא הרווחת מזה כלום)

                  O תגובה 1 תגובה אחרונה
                  2
                  • O מנותק
                    O מנותק
                    one1010
                    השיב ליהודי טוב ב נערך לאחרונה על ידי one1010
                    #9

                    @יהודי-טוב בעצם הקוד ניגש בעצמו לדפדפן ופותח את החשבון?
                    רואים את זה על המסך? המחשב חייב להיות דלוק?
                    זה אפשרי גם בשאר הבנקים וחברות האשראי?

                    מה שכתבת שאני יכול לשלוח במייל, זה לא מופיע בקוד שלך, נכון?

                    יהודי טובי תגובה 1 תגובה אחרונה
                    0
                    • יהודי טובי מנותק
                      יהודי טובי מנותק
                      יהודי טוב
                      השיב לone1010 ב נערך לאחרונה על ידי יהודי טוב
                      #10

                      @one1010 כתב בקוד Node לקבלת נתונים מבנק הפועלים:

                      @יהודי-טוב בעצם הקוד ניגש בעצמו לדפדפן ופותח את החשבון?

                      כן.

                      רואים את זה על המסך?

                      בקוד שכתבתי כן, אתה יכול להסיר את השורה הזו, וזה יגרום שלא יראו את זה על המסך.

                      headless: false,
                      

                      המחשב חייב להיות דלוק?

                      כן, המחשב מריץ את זה, ובקוד שלי זה גם הרצה חד"פ, אם אתה רוצה שזה ירוץ כל הזמן אתה צריך לדאוג לזה...

                      זה אפשרי גם בשאר הבנקים וחברות האשראי?

                      לא, הקוד הזה מתאים רק לבנק הפועלים.
                      לשאר הבנקים וחברות אשראי אתה יכול להשתמש בספריה israeli-bank-scrapers.
                      או להבין בעצמך מה התהליך שקורא כשאתה נכנס לבנק, ולכתוב לבד.

                      מה שכתבת שאני יכול לשלוח במייל, זה לא מופיע בקוד שלך, נכון?

                      נכון
                      זה לא קשור.
                      אם יש לך צורך ספציפי תכתוב (אולי באשכול חדש) ואולי יוכלו לכוון אותך לשם.
                      הקוד הזה בס"ה מביא את הנתונים.

                      תגובה 1 תגובה אחרונה
                      3

                      בא תתחבר לדף היומי!
                      • התחברות

                      • אין לך חשבון עדיין? הרשמה

                      • התחברו או הירשמו כדי לחפש.
                      • פוסט ראשון
                        פוסט אחרון
                      0
                      • דף הבית
                      • קטגוריות
                      • פוסטים אחרונים
                      • משתמשים
                      • חיפוש
                      • חוקי הפורום