איך בונים בוט מושלם?
-
@nigun לא אכפת לי כמה תגדיר לעצמך שזה קל, בכל מקרה תדע שאתה חי בסרט.
ההגדרה של תמונות או וי לא תלויה בהגדרת האתר אלא בגוגל, והיא עושה את זה בהתאם לחשדות שלה (גם מה שכתבת שגוגל הוסיפו זאת בהמשך לא נכון, מייד היה את זה רק שזה מופיע רק לחשודים. כמו"כ בגלל שגוגל עצמה מתבססת על בינה מלאכותית השתפרות הרובוטים רק משפרים את המנגנון ולא מצריכים לשכלל אותו).
ואתרים שמקבלים תרומות אולי מקבלים 0.2 השאר לא אכפת להם לשים 0.5 ומעלה, זה לא פוגע בכלל בחוויות משתמשים נורמליים.
(אתה גם כותב שאם תגזים בעל האתר יעלה את הרגישות כשאתה לא מבין שגוגל תשים לב מאה שנה לפניו ויורידו לך את הדירוג).אין הבדל מהותי בין reCaptcha 1,2,3 וכל מה שאמרתי תקף לכולם.
וכל מפתח בוט (גם משנת ה2000 שהיה captcha פשוט של תוים בתמונה בלתי קשים) יודע לעשות אירוע קליק, כך שיש לך בעיה בסיסית של לחשוד את כולם בפיגור.החברות עליהם אתה מדבר עובדים כנראה הרבה יותר פשוט, אתה אומר להם את בקשת האינטרנט אותה יש להפעיל והקאלבק איפה יחזור אליך התשובה, הם מפעילים אותה בדפדפן רגיל של אחד העובדים שמול מסך והוא עונה על הגדרת בן אדם ואז התשובה מגיעה למחשב שלהם ונשלחת משמה אליך. גם זה מצריך הרבה תחכום טכנולוגי מעבר לכח אדם כי הם צריכים לזייף שפע של פרטים כדי לא להיתפס.
-
@dovid
כנראה יש עוד מדומיינים כמוני
למשל כותב המאמר הזה
טוען שאפשר לשלוח לחברה את המפתח היחודי של reCaptcha
והחברה תקבל את השאלה ותשלח חזרה את הטוקן התואם ושאפשר לעבור את החסימה של reCaptcha ע"י הטוקן הנ"ל,
נשמע לי מוזר, אבל הוא טוען (בסוף המאמר) שהסיבה לכך זה היא שreCaptcha נועד רק לחסימת בוטים ששולחים אלפי בקשות בו זמנית ומעמיסים על השרת, ולא לחסום את מי שרוצה לבנות לעצמו בוט קטן שישלח הודעות בשמו או משהו כזה.
יכול להיות שיש לי בעיות בהבנת הנקרא (הקריאה שלי באנגלית די איטית ואני מדלג קטעים שנראים לי פחות חשובים)
תקן אותי אם אני טועה -
אם זה מעניין מישהו
זה קוד שכתבתי עם chromedp (שזה כדומה לSelenium אבל בGO)
בשביל לבנות את הבסיס להגדרת פרופיל זמני דרך הטלפוןpackage main import ( "context" "log" "time" "github.com/chromedp/chromedp" ) func main() { opts := append(chromedp.DefaultExecAllocatorOptions[:], //הפעלת כרום במצב GPU chromedp.Flag("headless", false), chromedp.Flag("disable-gpu", false), ) allocCtx, cancel := chromedp.NewExecAllocator(context.Background(), opts...) defer cancel() ctx, cancel := chromedp.NewContext(allocCtx, chromedp.WithLogf(log.Printf)) defer cancel() err := chromedp.Run(ctx, sendkeys()) if err != nil { log.Fatal(err) } // sendkeys sends func sendkeys() chromedp.Tasks { return chromedp.Tasks{ //ניווט לעמוד של הגדרות סינון chromedp.Navigate("https://netfree.link/user#/user/filter-settings"), //המתנה לשדה של שם משתמש וסיסמה להטען chromedp.WaitVisible(`//*[@name="phoneNumber"]`, chromedp.BySearch), chromedp.WaitVisible(`//*[@name="password"]`, chromedp.BySearch), //שליחת העריכם של שם משתמש וסיסמה chromedp.SendKeys(`input[name="phoneNumber"]`, "05212345", chromedp.NodeVisible), chromedp.SendKeys(`input[name="password"]`, "pass", chromedp.NodeVisible), //כניסה chromedp.Click(`//*[@type="submit"]`, chromedp.BySearch), //המתנה 3 שניות chromedp.Sleep(3 * time.Second), //לחיצה על הפתור של הפעלת פרופיל זמני chromedp.Click(`button.btn.btn-default.btn-xs`, chromedp.ByQuery), //בחירת הפרופיל(חסום) chromedp.SendKeys(`//select[@ng-model="editTmp.profile"]`, "חסום", chromedp.BySearch), //הגרת הזמן chromedp.SendKeys(`//input[@ng-model="editTmp.time"]`, "1", chromedp.BySearch), //שמירה chromedp.Click(`.fa.fa-check`, chromedp.ByQuery), chromedp.Click(`.btn.btn-primary.pull-end`, chromedp.ByQuery), //סיסמת הגדרות פרופיל chromedp.SendKeys(`input.form-control`, "aaa1234", chromedp.ByQuery), chromedp.Sleep(3 * time.Second), } }
אמנם קצת הסתבכתי עם זה
כי אין ID כמעט בכל הדף ואני צריך להשתמש רק בקלאס או ערכים אחרים וזה הקשה קצת על תפיסת האובייקט הנכון
אשמח לשמוע תגובות על זה
האם יש דרך יותר חכמה לישם את זה?
(אם מישהו רוצה את זה מקומפל בשביל לראות איך זה נראה על המחשב האישי? אני יכול לשלוח) -
@nigun אמר באיך בונים בוט מושלם?:
האם יש דרך יותר חכמה לישם את זה?
@dovid אמר באיך בונים בוט מושלם?:
הפשוטה ביותר (מהפן התכנותי/טכני של הפעולה עצמה) זה לעשות מיני "הנדסה לאחור" לאתר,
ופשוט לעשות אותו דבר. בלי עכבר ובלי בוט. למשל בלוגין לאתר זה לאחזר את AntiForgeryToken ואח"כ לשלוח פוסט איתו ועם שם המשתמש וסיסמה. ב99% מהאתרים והפעולות זה עובד יופי.לשלושת הבעיות הראשונות יש ספריות בסגנון של סילניום ... זה יקר מאוד בביצועים .... ואני גם ממליץ לא להשתמש בספריה בסגנון אם אין בעיה מהסוגים האלו.
-
-
@nigun בא נתחיל מהתחלה.
אתה צריך בוט כדי לעשות פעולה באתר, נניח להיכנס לנטפרי עם סיסמה ולשנות שם משהו.
שאלתי למה אתה צריך בוט, הרי אפשר לעשות הכל עם התוכנה שלך ישירות, וציינתי כמשל פעלות לוגין, ששמה זה מסובך כי צריך לאחזר קודם טוקן.
אז אמרת לי, הניחא לוגין, אבל שאר פעולות שנעשים בדפדפן איך נוכל לעשותם בלי דפדפן.
ואז שאלתי אותך, הרי הדפדפן חייב לספר לשרת על פעולות אלו, למה שלא תוכל לספר גם אתה ישירות בעצמך. -
-
כל מה שסלניום ודומיו עושים זה שימוש בAPI של כרום
שימוש בAPI של כרום לבד יהיה כנראה אפשרי אבל סתם מסובך -
אני לא יודע למה אתה מתכוון כשאתה אומר "בוט"
אני מתכוון לסקריפט אוטומטי שעושה פעולה X בדיוק כמו בן אדם
במקרה שלנו הוא צריך להשתמש בדפדפן כדי לעשות פעולות בדיוק כמו בן אדם -
כשאתה כתבת לי שאפשר לאחזר את AntiForgeryToken ולשלוח אותו בפוסט
חשבתי שהשליחה נעשית בפוסט ישירות לכתובת ולא דרך דפדפן
ולכן כתבתי שזה טוב ללוגאין אבל לשאר הפעולות אני צריך דפדפן (כתבתי בוט אבל הייתי צריך לכתוב סלניום וכו')
ומה שהתקשתי זה בחיקוי פעולות הדפדפן אחד לאחד
אמנם בסוף הצלחתי אבל אני מחפש דרך יותר פשוטה
-
-
- לא דיברתי על סלניום, לא מכיר את הספריה הזו ולא את כל חברותיה כי מעולם לא הייתי צריך אותם.
- בלי קשר להגדרת "כמו בן אדם", אם המקרה שלנו הוא נטפרי אז למה צריך בדיוק כמו בן אדם. למה זה שונה מלוגין.
- הבנת אותי מצויין. אכן הדרך היחידה של דפדפן לתקשר עם שרת זה בקשות אינטרנט. שאר הפעולות שאתה מדבר עליהם לא קיימות, יש רק את זה.
נ.ב. יש לי רושם שיש לך קושי מללמוד מאחרים אני צודק? כל השאלות שלך פה בפורום היו "גבוהות", מעולם לא שאלת איך עושים X - דבר שהוא פשוט בעיניך, אני חושב שאתה מפסיד בגלל זה.
-
- יכול להיות שיש לי קושי ללמוד מאחרים
אבל הסיבה שאני שאני לא שואל איך עושים X זה פשוט כי יש את stackoverflow שלרוב בחיפוש פשוט בגוגל אני מוצא את התשובה ואין סיבה לשאול את זה בפורום הז אא"כ אני לא מוצא את מילות החיפוש הנכונות
אבל בנושאים יותר כללים אני מתקשה בהבנת הדברים בפורומים ובפוסטים באנגלית (בעיקר כי אני קורא לאט)
אז הפורום הזה זה נראה לי מקום טוב ללמוד על מושגים חדשים וקונספטים מופשטים וכדו'
אם אני מפסיד משהו מזה שאני לא שואל שאלות פשוטות? אשמח לשמוע מה בדיוק אני מפסיד. - במקרה שלנו לא הבנתי איך אני יכול לשלוח את הערכים שבשונה משם מתשתמש וסיסמה הם לא נשלחים בפוסט לHTTP
אלא משהו בJS (שאני ממש לא מבין בזה ואני לומד את זה עכשיו בעל כורחי בדרך עקיפה (שכמובן זה לא חכם אבל כמו שכתבתי בעבר קשה לי ללמוד דברים שלא נצרכים לי כרגע))
אני חשבתי שכנראה הבקשות נשלחים בוובסוקט או משהו כזה
ואין לי מושג איך אפשר לשלוח אותם בלי דפדפן
- יכול להיות שיש לי קושי ללמוד מאחרים
-
@nigun אמר באיך בונים בוט מושלם?:
במקרה שלנו לא הבנתי איך אני יכול לשלוח את הערכים שבשונה משם מתשתמש וסיסמה הם לא נשלחים בפוסט לHTTP
אלא משהו בJS (שאני ממש לא מבין בזה ואני לומד את זה עכשיו בעל כורחי בדרך עקיפה (שכמובן זה לא חכם אבל כמו שכתבתי בעבר קשה לי ללמוד דברים שלא נצרכים לי כרגע))
אני חשבתי שכנראה הבקשות נשלחים בוובסוקט או משהו כזה
ואין לי מושג איך אפשר לשלוח אותם בלי דפדפןבודקים ב F12 בלשונית Network.
הכי פשוט. -
@WWW אמר באיך בונים בוט מושלם?:
@nigun אמר באיך בונים בוט מושלם?:
במקרה שלנו לא הבנתי איך אני יכול לשלוח את הערכים שבשונה משם מתשתמש וסיסמה הם לא נשלחים בפוסט לHTTP
אלא משהו בJS (שאני ממש לא מבין בזה ואני לומד את זה עכשיו בעל כורחי בדרך עקיפה (שכמובן זה לא חכם אבל כמו שכתבתי בעבר קשה לי ללמוד דברים שלא נצרכים לי כרגע))
אני חשבתי שכנראה הבקשות נשלחים בוובסוקט או משהו כזה
ואין לי מושג איך אפשר לשלוח אותם בלי דפדפןבודקים ב F12 בלשונית Network.
הכי פשוט.צודק
רק עכשיו שמתי לב שכל הערכים נשלחים כשלוחצים על שמור
אני הקלטתי בעבר וכנראה לא חיכיתי עד הסוף