@THMV
תצרף דוגמא של המייל.
ימות המשיח?
בקובץ מצורף או בגוף המייל?
@THMV
תצרף דוגמא של המייל.
ימות המשיח?
בקובץ מצורף או בגוף המייל?
@one1010 כתב בקוד Node לקבלת נתונים מבנק הפועלים:
@יהודי-טוב בעצם הקוד ניגש בעצמו לדפדפן ופותח את החשבון?
כן.
רואים את זה על המסך?
בקוד שכתבתי כן, אתה יכול להסיר את השורה הזו, וזה יגרום שלא יראו את זה על המסך.
headless: false,
המחשב חייב להיות דלוק?
כן, המחשב מריץ את זה, ובקוד שלי זה גם הרצה חד"פ, אם אתה רוצה שזה ירוץ כל הזמן אתה צריך לדאוג לזה...
זה אפשרי גם בשאר הבנקים וחברות האשראי?
לא, הקוד הזה מתאים רק לבנק הפועלים.
לשאר הבנקים וחברות אשראי אתה יכול להשתמש בספריה israeli-bank-scrapers.
או להבין בעצמך מה התהליך שקורא כשאתה נכנס לבנק, ולכתוב לבד.
מה שכתבת שאני יכול לשלוח במייל, זה לא מופיע בקוד שלך, נכון?
נכון
זה לא קשור.
אם יש לך צורך ספציפי תכתוב (אולי באשכול חדש) ואולי יוכלו לכוון אותך לשם.
הקוד הזה בס"ה מביא את הנתונים.
@one1010 כתב בקוד Node לקבלת נתונים מבנק הפועלים:
איך? בהקלטת תעבורה?
או הקלטת תעבורה או לבדוק בנטוורק.
אגב אתה יכול גם לעשות העברות (אם כי - זה בד"כ מצריך קוד חד"פ כל העברה - ככה זה אצלי - ואם כן לא הרווחת מזה כלום)
@יוס
אתה רואה דפדפן שנפתח?
מה אתה רואה בדפדפן?
יכול להיות שפעם ראשונה צריך קוד חד"פ.
תנסה להוסיף אחרי הכניסה את השורות האלו
const currentUrl = page.url();
console.log(currentUrl);
אתה אמור לקבל את זה:
https://login.bankhapoalim.co.il/ng-portals/rb/he/homepage
@one1010
בדוגמא הזו אני מושך:
רשימה עם כל החשבונות בנק.
על כל חשבון פרטים בסיסיים ותנועות (מהשנה האחרונה או תאריכים שצוינו).
אם אתה רוצה למשוך משהו נוסף אתה יכול לבדוק באתר של הבנק לאיזה כתובת מתבצעת הפניה ולהוסיף את זה לmap שיוסיף את זה עבור כל חשבון.
@one1010 כתב בקוד Node לקבלת נתונים מבנק הפועלים:
אתה מצליח למשוך את המידע בפועל?
כן
אשמח להבין יותר מה אתה מקבל.
אני שומר את זה בקובץ json בתיקיה של הפרויקט.
אתה יכול לעשות עם זה מה שבא לך - ליצור מזה קובץ אקסל, לשלוח מייל, להריץ משימה שתבדוק כל הזמן אם יש נתונים חדשים ותתריע לך על זה וכו'...
אבל זה כבר לא קשור למשיכת הנתונים מהבנק.
מה שכתבתי זה לא מוצר שמתאים לצורך ספציפי - אלא רק מושך מהבנק נתונים על החשבון ואתה מחליט מה לעשות עם זה.
בנוסף שים לב שצריך להתקין את הספריות שאני מייבא.
ראיתי את הספריה 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');
@THMV
שאלתי אותו בשבילך..
תיצור סימניה חדשה בכרום,
ובערך של הURL תדביק את הטקסט הבא:
ותיכנס לאתר, ותלחץ על הסימניה ואח"כ תלחץ על העמודה שאתה רוצה להעתיק.
כשאתה מסיים תוכל ללחוץ שוב על הסימניה
בדקתי את זה על הטבלאות כאן וזה עבד מעולה, אם זה לא עובד באתר שאתה צריך יכול להיות שזה עובד בצורה שונה.
javascript:(function() { let active = false; let selectedColumnIndex = null; const highlightClass = 'highlight-column'; const style = document.createElement('style'); style.textContent = ` .${highlightClass} { background-color: rgba(255, 255, 0, 0.3); } `; document.head.appendChild(style); function clearHighlights(table) { table.querySelectorAll(`.${highlightClass}`).forEach(cell => { cell.classList.remove(highlightClass); }); } function mouseOverHandler(event) { const cell = event.target.closest('td, th'); if (cell && (cell.parentElement.parentElement.tagName === 'TBODY' || cell.parentElement.parentElement.tagName === 'THEAD')) { const table = cell.closest('table'); if (!table) return; clearHighlights(table); const columnIndex = [...cell.parentElement.children].indexOf(cell); selectedColumnIndex = columnIndex; table.querySelectorAll('tr').forEach(row => { const columnCell = row.children[columnIndex]; if (columnCell) { columnCell.classList.add(highlightClass); } }); } } function clickHandler(event) { const cell = event.target.closest('td, th'); if (cell && selectedColumnIndex !== null) { const table = cell.closest('table'); if (!table) return; const columnData = []; table.querySelectorAll('tr').forEach(row => { const columnCell = row.children[selectedColumnIndex]; if (columnCell) { columnData.push(columnCell.textContent.trim()); } }); navigator.clipboard.writeText(columnData.join('\n')).then(() => { alert('ההעתקה בוצעה בהצלחה!'); }).catch(err => { console.error('Failed to copy text: ', err); alert('שגיאה בהעתקה ללוח ההעתקה.'); }); } } if (!window.toggleTableColumnCopy) { window.toggleTableColumnCopy = function() { if (!active) { document.addEventListener('mouseover', mouseOverHandler); document.addEventListener('click', clickHandler); alert('הפונקציונליות הופעלה!'); } else { document.removeEventListener('mouseover', mouseOverHandler); document.removeEventListener('click', clickHandler); clearHighlights(document); alert('הפונקציונליות הופסקה!'); } active = !active; }; } toggleTableColumnCopy(); })();
או שאפשר להדביק סקריפט שיעתיק את זה...
אפשר לעשות סקריפט שמאזין לmousedoun ובוחר את הטבלה הזו ורץ על כל האלמנטים שהם ברמת td שנבחר ומוסיף אותם ללוח ההעתקה
@THMV
אתה יכול להתקשקש עם הGPT עד שתקבל תוצאה רצויה
ואז תוכל גם להדביק את זה לסימניה שיהיה לך יותר נוח
מעניין למה?
תודה מדהים, בול מה שהייתי צריך..
אני צריך לבדוק את המחוות שיש בסמאטרפונים - במחשב.
אצבע אחת הצלחתי לדמות בכרום כששיניתי את התצוגה למובייל.
יש לי מחשב נייד עם משטח לעכבר - והייתי רוצה לבדוק מחוות עם כמה אצבעות.
יש מישהו שהתעסק עם זה?
תודה רבה
אתה יכול גם לנקד, הקולות של גוגל טובים יותר - (בעברית, בכל אופן)
אתה יכול לעלות לרמה אחת מעל את השנה, בהגדרות של הפיווט.
@Shmuel754 כתב בחשבון גוגל שנחסם:
תנסה לשחזר מאותו מחשב שהתחברת בעבר
ניסיתי ולא עוזר
ואם יש IP קבוע עוד יותר טוב.
אין לי
מוגדר לי מייל לשחזור חשבון, אבל זה לא מספיק להם.
אני מגיע לשלב הזה אחרי שאני מאמת את המייל.
לא זוכר אם כתבתי מס' לאימות, בכל אופן ניסיתי עם המספרים שלי וזה לא עבד.
פתחתי חשבון גוגל מכמה מחשבים, וגוגל חסמו לי את זה ודורשים אימות טלפוני.
הבעיה היא שכל מספר שאני כותב (גם מספרים שמקבלים SMS) אני מקבל את השגיאה:
"לא ניתן להשתמש במספר הטלפון הזה לאימות."
וכשניסיתי שוב קיבלתי את המסך הזה:
מה אני יכול לעשות?
תודה רבה
@A0533057932
הבעיה היא באימולטור שמריץ את האפלקציה, ולכן זה לא נראה לי קשור.
@meir-lamdan כתב בבניית אתר מעוצב:
אני הייתי ממליץ ללמוד vue הוא הרבה יותר קל ללמידה
לא יצא לי לעבוד עם vue, אבל גם ריאקט ממש קל ללמידה..
אתה עבדת עם ריאקט?
צריך מישהו אוביקטיבי שיכריע
@EMG כתב בבניית אתר מעוצב:
איך אמור לעבוד דף אינטרנט מקצועי מהרבה דפים שונים (ובכל דף יש את אותו תפריט שמשתמש באותו css) או שזה בנוי מדף אחד ובכל לחיצה על חלק אחר בתפריט שולח בget או בדף אחד שמנתב לפי ה routing
בריאקט אתה כאילו בונה כמה עמודים (או יותר נכון, בונה קומפוננטות- רכיבים, שזה כמו פונקציות שאתה יכול להשתמש עם כל אחד מכמה מקומות ולהעביר לו פרמטרים שונים) ובסוף נהיה מזה דף HTML אחד שמשנה את התוכן לפי הראוט.
אתה מגדיר מה יהיה קבוע בעמוד ומה ישתנה לפי הניתוב.
ממליץ לך ללמוד את זה. אתה צריך בסיס של html, css, js ואז בקלי קלות אתה יכול ללמוד את ריאקט...