המלצה | לתכנת בלי לדעת תיכנות - היום זה אפשרי
-
-
@sivan22 כתב בהמלצה | לתכנת בלי לדעת תיכנות - היום זה אפשרי:
@sivan22
עדכון (ערכתי גם את הפוסט למעלה): ההמלצה הנוכחית שלי היא להשתמש בCline עם API חינמי של גוגל. אמנם מדי פעם הוא נעצר, אבל סך הכל אפשר לעבוד איתו, והוא כמובן חינמי.יש מצב להסבר איך ניתן להשיג מפתח ואיפה לשים אותו בתוכנה עם איזה הגדרות וכו'
-
@צללית כתב בהמלצה | לתכנת בלי לדעת תיכנות - היום זה אפשרי:
@יעקב-4 יש הסבר למעלה בפוסט הראשון, נכנסים לקישור שמובא שם ומקבלים מפתח API בתוכנה יש מקום ברור לשים אותו מיד בהתחלה אחרי שאתה גומר להתקין את התוסף בתוך הVSCODE, צריך לבחור מתוך הרשימה את GEMINI של google ומתחת זה יש מקום להכניס מפתח API
אוקי אתה מסתמא מתכוון לזה:
ואז להכניס אותו פה:
זה מה שקורה:
-
@יעקב-4 כתב בהמלצה | לתכנת בלי לדעת תיכנות - היום זה אפשרי:
אוקי אתה מסתמא מתכוון לזה:
https://mitmachim.top/assets/uploads/files/1735056799181-b24203df-0ca9-4f79-bee3-71e74b963e07-image.pngלא להעתיק את כל מה שיש שם, אלא שם ללחוץ על יצירת מפתח API, ואז להעתיק את המפתח שנוצר
-
@EBA כתב בהמלצה | לתכנת בלי לדעת תיכנות - היום זה אפשרי:
@מישהו12 כתב בהמלצה | לתכנת בלי לדעת תיכנות - היום זה אפשרי:
א"א לתכנת בלי לדעת תכנות.
אני לא יודע מילה וחצי מילה בפייתון, הוא הדריך אותי אפילו מאיפה להוריד פייתון ואיך להתקין...
והיום בעבודה של כמה שעות עם הבינה האנושית שלי, הכנתי תוכנה להקפצה אוטומטית של מודעות ביד2, משהו שאני חולם עליו כבר שנים.יצא מדהים, הקוד בספויילר.
from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import time import os import json from datetime import datetime from dotenv import load_dotenv from bidi.algorithm import get_display def display_rtl(text): """מציג טקסט בעברית בכיוון הנכון""" return get_display(text) load_dotenv() class ListingUpdater: def __init__(self): print(display_rtl("מאתחל את דפדפן Chrome...")) self.cookies_file = "yad2_cookies.json" self.setup_driver() def setup_driver(self): chrome_options = Options() chrome_options.add_argument('--disable-gpu') chrome_options.add_argument('--no-sandbox') chrome_options.add_argument('--disable-dev-shm-usage') chrome_options.add_argument('--start-maximized') chrome_options.add_experimental_option("detach", True) try: self.driver = webdriver.Chrome(options=chrome_options) print(display_rtl("דפדפן Chrome הואצל בהצלחה")) except Exception as e: print(display_rtl(f"שגיאה בהגדרת דפדפן Chrome: {str(e)}")) raise def save_cookies(self): cookies = self.driver.get_cookies() with open(self.cookies_file, 'w') as f: json.dump(cookies, f) print(display_rtl("נשמרו עוגיות בהצלחה")) def load_cookies(self): try: with open(self.cookies_file, 'r') as f: cookies = json.load(f) # Navigate to the domain first self.driver.get('https://www.yad2.co.il') time.sleep(2) # Add the cookies for cookie in cookies: self.driver.add_cookie(cookie) print(display_rtl("עוגיות נטענו בהצלחה")) return True except FileNotFoundError: print(display_rtl("לא נמצא קובץ עוגיות קיים")) return False except Exception as e: print(display_rtl(f"שגיאה בטעינת עוגיות: {str(e)}")) return False def check_login_status(self): try: print(display_rtl("בודק סטטוס התחברות...")) # First go to main page self.driver.get('https://www.yad2.co.il') time.sleep(3) # Then try to access my-ads print(display_rtl("מנסה לגשת לאזור האישי...")) self.driver.get('https://www.yad2.co.il/my-ads') time.sleep(10) # תן יותר זמן לטעינה # Check if we're actually on the my-ads page current_url = self.driver.current_url print(display_rtl(f"כתובת נוכחית: {current_url}")) if "my-ads" in current_url: print(display_rtl("מחובר בהצלחה לאזור האישי!")) return True else: print(display_rtl("לא הצלחנו להגיע לאזור האישי")) return False except Exception as e: print(display_rtl(f"שגיאה בבדיקת סטטוס התחברות: {str(e)}")) return False def manual_login(self): print(display_rtl("\nאנא התחבר באופן ידני ל-Yad2:")) print(display_rtl("1. הכנס את פרטי ההתחברות שלך")) print(display_rtl("2. פתור את אתגר האבטחה אם נדרש")) print(display_rtl("3. לאחר התחברות מוצלחת, התסריט ימשיך באופן אוטומטי")) self.driver.get('https://www.yad2.co.il/auth/login') # Wait for successful login WebDriverWait(self.driver, 300).until( lambda driver: "my-ads" in driver.current_url or "feed/my" in driver.current_url ) print(display_rtl("התחברת בהצלחה!")) self.save_cookies() def update_listings(self): try: print(display_rtl("מנווט לדף המודעות שלי...")) self.navigate_to_my_ads() # מחפש את כפתורי ההקפצה print(display_rtl("\nמחפש כפתורי הקפצה...")) bump_buttons = self.driver.find_elements(By.CSS_SELECTOR, "[class*='bump-button_bumpButton']") if not bump_buttons: print(display_rtl("לא נמצאו כפתורי הקפצה")) return False print(display_rtl(f"נמצאו {len(bump_buttons)} כפתורי הקפצה")) # עובר על כל כפתור הקפצה for i in range(len(bump_buttons)): try: # מנווט מחדש לדף המודעות בכל פעם self.navigate_to_my_ads() print(display_rtl(f"\nמנסה להקפיץ מודעה {i + 1}...")) # מוצא את כפתורי ההקפצה מחדש אחרי הניווט bump_buttons = self.driver.find_elements(By.CSS_SELECTOR, "[class*='bump-button_bumpButton']") if i >= len(bump_buttons): print(display_rtl("לא נמצאו יותר כפתורי הקפצה")) break button = bump_buttons[i] print(f"\nטקסט על כפתור {i + 1}:", button.text.strip()) # בודק אם הכפתור מושבת if button.get_attribute("aria-disabled") == "true" or button.get_attribute("disabled"): print(display_rtl("הכפתור מושבת")) continue # גולל לכפתור self.driver.execute_script("arguments[0].scrollIntoView(true);", button) time.sleep(1) # מנסה ללחוץ באמצעות JavaScript print("מנסה ללחוץ על כפתור ההקפצה...") self.driver.execute_script("arguments[0].click();", button) print("לחיצה על כפתור ההקפצה") # מחכה קצת ואז מרענן את הדף time.sleep(2) print("מרענן את הדף...") self.driver.refresh() # מחכה לטעינת הדף print("ממתין לטעינת הדף...") self.wait_for_page_load() print("הדף נטען") # מחכה קצת זמן אחרי ההקפצה time.sleep(3) except Exception as e: print(display_rtl(f"שגיאה בהקפצת מודעה {i + 1}: {str(e)}")) if hasattr(e, 'msg'): print(f"Message: {e.msg}") return True except Exception as e: print(display_rtl(f"נכשל בהקפצת המודעות: {str(e)}")) if hasattr(e, 'msg'): print(f"Message: {e.msg}") return False def navigate_to_my_ads(self): """מנווט לדף המודעות שלי ומחכה שהדף יטען""" self.driver.get('https://www.yad2.co.il/my-ads') # מחכה שהדף יטען print(display_rtl("ממתין לטעינת הדף...")) WebDriverWait(self.driver, 30).until( lambda driver: driver.execute_script("return document.readyState") == "complete" ) # מחכה שה-splash screen ייעלם print(display_rtl("ממתין שמסך הטעינה ייעלם...")) try: splash_screen = WebDriverWait(self.driver, 10).until( EC.presence_of_element_located((By.CLASS_NAME, "splash-screen_box__diyY1")) ) WebDriverWait(self.driver, 20).until( EC.staleness_of(splash_screen) ) print(display_rtl("מסך הטעינה נעלם")) except: print(display_rtl("לא נמצא מסך טעינה")) # מחכה שיופיע התוכן האמיתי print(display_rtl("ממתין לטעינת התוכן...")) time.sleep(3) def wait_for_page_load(self): WebDriverWait(self.driver, 30).until( lambda driver: driver.execute_script("return document.readyState") == "complete" ) def close(self): try: self.driver.quit() except: pass def main(): updater = None try: while True: # לולאה אינסופית print("\nמתחיל הרצה חדשה...") updater = ListingUpdater() updater.load_cookies() if updater.check_login_status(): print(display_rtl("התחברות באמצעות עוגיות הצליחה!")) else: print(display_rtl("צריך להתחבר שוב...")) updater.manual_login() print(display_rtl("\nמתחיל את תהליך העדכון...")) updater.update_listings() updater.close() # מחכה 4 שעות ודקה print("\nממתין 4 שעות ודקה עד להרצה הבאה...") time.sleep((4 * 60 * 60) + 60) # 4 שעות + דקה בשניות except KeyboardInterrupt: print("\nהתוכנית הופסקה על ידי המשתמש") finally: if updater: updater.close() if __name__ == "__main__": main()
יש לך את זה בתוכנה מוכנה? איך אני מפעיל אותו?