متفرق پائتھون کے ذریعے واٹس ایپ ویب کو آٹو میٹ کرنا۔

ابن سعید اردو نے 'پائتھون' کی ذیل میں اس موضوع کا آغاز کیا، ‏جون 24, 2020

  1. ابن سعید اردو

    ابن سعید اردو محفلین

    مراسلے:
    79
    جھنڈا:
    Pakistan
    موڈ:
    Buzzed
    پچھلے دنوں مجھے محسوس ہو کہ میرے کاروبار (پرنٹنگ کا کاروبار ہے میرا) میں سست روی ہے۔ چنانچہ کیوں ناں اپنے کاروبار کی تشہیر کی جائے مگر مفت میں :)۔ سو یہ سوچ کر میں نے اپنی پراڈکٹس کو واٹس ایپ گروپ میں بھیجنا شروع کردیا۔ مگر یہ کیا؟ میں تو صرف چند گروپس میں ہی ایڈ تھا۔ جس پر پوسٹنگ کا کچھ خاص ردعمل بھی نہیں آیا۔

    پھر دماغ لڑایا تو ذہن میں ایک بات آئی، کیوں نہ اپنے کسٹمرز کو ہی واٹس ایپ پر میسج بھیجا جائے؟ میں اپنے کسٹمرز کا ریکارڈ رکھتا ہوں، میرے پاس تقریبا 1200 ایسے نمبرز موجود ہیں جو کہ واٹس ایپ پر متحرک ہیں۔ مگرانھیں پیغام بھیجے کیسے؟ واٹس ایپ نے کچھ عرصہ قبل انڈیا میں واٹس ایپ کے ذریعے افواہیں پھیلنے کی بنا پر میسج آگے بھیجنے کی حد 256 سے کم کرکے صرف 5 کردی تھی۔ اگر میں پانچ پانچ کرکے میسج بھیجتا تو اس میں اچھا خاصا وقت لگ جاتا۔ اور پیغام بھیجتے وقت، جن کو پیغام نہیں بھیجا ہے، انھیں ڈھونڈنا اور منتخب کرنا، اچھا خاصا مغز ماری کا کام تھا۔

    چنانچہ کافی سوچ بچار کے بعد میرے ذہن میں یہ خیال آیا کہ کیوں نہ پائتھون کے ذریعے سے واٹس ایپ ویب کو خودکار کردیا جائے۔ اور میں نے اس خیال کو عملی جامہ پہنانے کا فیصلہ کیا۔ دودن کی محنت کے بعد میں میرا پروگرام اس قابل تھا کہ وہ واٹس ایپ ویب پر نمبر کو ڈھونڈھے، انھیں منتخب کرے اور ایک پرسنالائز میسج لکھے اور بھیج دے۔ ساتھ میں پراڈکٹ کی تصاویر بھی بھیجیے۔

    اس طرح میرا کافی سارا وقت بھی بچ گیا، اور کچھ دوسری خصوصیات کے حامل پیغام بھی ارصال ہونے لیے۔ مطلب پرسنلائز میسجز، ملٹی میڈیا میسج وغیرہ۔۔۔۔

    تو آپ میں سے کوئی اس اسکرپٹ کو بہتر بنانے میں دلچسپی رکھتا ہے؟ محب علوی بھائی، اگر آپ تعاون کا ارادہ بنائے تو میں بے حد مشکور ہونگا۔


    کوڈ:
    import os, pyautogui, openpyxl, pyperclip, time, winsound, sys
    
    # Ask user for directory that contain referance images
    
    #work_dir = str(input('Absolute path of directory that contain images: '))
    work_dir = r'C:\Users\Tossot\Desktop\whatsapp_message_forwarder'
    os.chdir(work_dir)
    
    # Check for required image files
    
    msg_forward_icon = 'msg_forward_icon.png'
    search_box = 'search_box.png'
    search_box_back_icon = 'search_box_back_icon.png'
    contact_selection_unselect = 'contact_selection_unselect.png'
    contact_selection_selected = 'contact_selection_selected.png'
    send_button = 'send_button.png'
    msg_box = 'msg_box.png'
    check_if_contact_exist = 'check_if_contact_exist.png'
    
    if not os.path.isfile(msg_forward_icon):
        print('Image "' + msg_forward_icon + '" missing')
        
    if not os.path.isfile(search_box):
        print('Image "' + search_box + '" missing')
    
    if not os.path.isfile(search_box_back_icon):
        print('Image "' + search_box_back_icon + '" missing')
    
    if not os.path.isfile(contact_selection_unselect):
        print('Image "' + contact_selection_unselect + '" missing')
    
    if not os.path.isfile(contact_selection_selected):
        print('Image "' + contact_selection_selected + '" missing')
    
    if not os.path.isfile(send_button):
        print('Image "' + send_button + '" missing')
    
    if not os.path.isfile(msg_box):
        print('Image "' + msg_box + '" missing')
    
    if not os.path.isfile(check_if_contact_exist):
        print('Image "' + check_if_contact_exist + '" missing')
    
    def click_on_msg_forward_icon():
        msg_forward_icon_trace = pyautogui.locateOnScreen(msg_forward_icon, confidence=0.5)
        if msg_forward_icon_trace == None:
            # Try to close opened message forward dialog
            pyautogui.press('Esc', presses=2)
            time.sleep(1)
            msg_forward_icon_trace = pyautogui.locateOnScreen(msg_forward_icon, confidence=0.5)
    
            if msg_forward_icon_trace == None:
                #Search for source message, then forward it.
                pyautogui.click(pyautogui.locateOnScreen('main_window_search_box.png', confidence=0.8))
                pyautogui.write('+92 21 32290223')
                time.sleep(1)
                pyautogui.click(pyautogui.locateOnScreen('source_message_sender.png', confidence=0.8))
                time.sleep(0.5)
                msg_forward_icon_trace = pyautogui.locateOnScreen(msg_forward_icon, confidence=0.5)
                
    
    
        pyautogui.click(msg_forward_icon_trace)
                
    def click_on_search_box(c):
        step_two = pyautogui.locateOnScreen(search_box, confidence=c)
        pyautogui.click(step_two)
    
    def click_on_search_box_back_icon(c):
        step_three = pyautogui.locateOnScreen(search_box_back_icon, confidence=c)
        pyautogui.click(step_three)
    
    def click_on_contact_selection_unselect():
        not_select = pyautogui.locateOnScreen(contact_selection_unselect, confidence=0.9)
        pyautogui.click(not_select)
    
    def check_if_contact_selected(c):
        selected = pyautogui.locateOnScreen(contact_selection_selected, confidence=c)
        return selected == None
    
    def click_on_send_button(c):
        send_msg = pyautogui.locateOnScreen(send_button, confidence=c)
        pyautogui.click(send_msg, interval=0.5)
    
    def click_on_msg_box(c):
        click_to_write = pyautogui.locateOnScreen(msg_box, confidence=c)
        pyautogui.click(click_to_write)
    
    # TODO:
    # Add feature that check if message already sent
    # by checking excel cell style.
    
    def check_if_message_already_sent(cell_i):
        sheet.cell(cell_i, 1).style = 'Good'
        return True
    
    def open_chrome():
        pyautogui.click(pyautogui.locateOnScreen('chrome_icon.png', confidence=0.9))
    
    
    # Open excel list of contacts
    wb = openpyxl.load_workbook('contact_list.xlsx')
    sheet = wb.worksheets[0]
    
    i = sheet.max_row
    
    open_chrome()
    
    while i != 1:
        
        click_on_msg_forward_icon()
        time.sleep(1)
    
        pyperclip.copy(sheet.cell(i, 4).value)
        pyautogui.write(pyperclip.paste())
        
        #Compose Message:
    
        business_name = sheet.cell(i, 1).value
        if sheet.cell(i, 1).value != None:
            business_name = '*' + sheet.cell(i, 1).value + '*'
            business_name = business_name.replace('\n', '')
        else:
            business_name = ''
            
        product_url = 'https://bharosa.solutions/product/self-destructive-egg-shell-warranty-stickers-25mm-x-8mm/'
        unsub_msg = '_Reply UNSUB to opt-out from promotional msgs. UNSUB ALL to opt-out from all types of msgs_'
    
        message = 'Hi ' + business_name + ' \nComputers, Laptops, Mobiles aur Electronics kay liyeh High Quality Tamper Evident, *Warranty VOID Sticker* Labels banwaiyeh. Multicolor Digital Priting, Fast Service, Competitive Price. \n Order Online:' + product_url
    
    
    
        #Compose Message: End
        click_on_contact_selection_unselect()
        time.sleep(1)
        
        click_on_send_button(0.8)
        time.sleep(2)
    
        pyautogui.write(message, interval=0.01)
        pyautogui.press('Enter')
        time.sleep(0.2)
        
        pyautogui.write(unsub_msg, interval=0.01)
        pyautogui.press('Enter')
        time.sleep(1)
        
        sheet.cell(i, 4).style = 'Good'
        i = i - 1
    
        wb.save('contact_list.xlsx')   
    
    
    # TODO:
    # Add feature that multiple forward icons found,
    # Click on forward button from 'First Message Forwarded'
    
    
     
    • پسندیدہ پسندیدہ × 3
  2. محمداحمد

    محمداحمد لائبریرین

    مراسلے:
    22,391
    جھنڈا:
    Pakistan
    موڈ:
    Amazed
    یہ کوڈ موبائل پر چلتا ہے یا ونڈوز پر۔

    اور یہ کوڈ کس طرح کام کرتا ہے۔؟ کچھ تفصیل اگر آپ بتا سکیں۔
     
  3. ابن آدم

    ابن آدم محفلین

    مراسلے:
    676
    جھنڈا:
    Pakistan
    موڈ:
    Busy
    دیکھنے میں تو ونڈوز پر چلنے والا پروگرام لگ رہا ہے لیکن کیسے چلے گا یہ تو صاحب لڑی ہی بتا سکتے ہیں
     
  4. ابن سعید اردو

    ابن سعید اردو محفلین

    مراسلے:
    79
    جھنڈا:
    Pakistan
    موڈ:
    Buzzed
    یہ کوڈ وینڈوز کے لیے ہے، اور بنیادی طور پر یہ پائی آٹو گوئی ماڈیول کے ذریعے کی بورڈ، ماؤس کو کنٹرول کررہا ہے۔ اور اسکرین پر موجود چیزوں کو دی گئی تصاویر کے نمونوں سے میچ کرکے ان پر کل کرتا ہے۔

    مثال کے طور پر یہ کوڈ:
    کوڈ:
       
    def click_on_send_button(c):
        send_msg = pyautogui.locateOnScreen(send_button, confidence=c)
        pyautogui.click(send_msg, interval=0.5)
    
    یہ کوڈ دراصل اس [​IMG] تصویر کو اسکرین پر ڈھونڈ پر اس پر کلک کرے گا۔

    امید ہے کہ آپ کو کچھ کچھ سمجھ آرہا ہوگا کہ یہ پروگرام کیسے کام کرتا ہے۔
     
    • پسندیدہ پسندیدہ × 1
  5. ابن سعید اردو

    ابن سعید اردو محفلین

    مراسلے:
    79
    جھنڈا:
    Pakistan
    موڈ:
    Buzzed
    اس کو چلانے کے لیے اسے تصویری نمونوں کے پتے دینے پڑیں گے۔ پھر یہ چلے گا۔ جیسا کہ آپ مندرجہ ذیل تصویر میں دیکھ سکتے ہیں یہ میں نے ورک ڈائریکٹری میں تصاویر کے نمونے رکھے ہوئے ہیں:
    [​IMG]
     
    • پسندیدہ پسندیدہ × 1
  6. ابن سعید اردو

    ابن سعید اردو محفلین

    مراسلے:
    79
    جھنڈا:
    Pakistan
    موڈ:
    Buzzed
    شاید میں نے بہت مشکل الفاظ میں لکھا ہے، کوئی دلچسپی نہیں لے رہا۔۔۔۔
     
  7. خالد محمود چوہدری

    خالد محمود چوہدری محفلین

    مراسلے:
    12,744
    جھنڈا:
    Pakistan
    موڈ:
    Festive
    مشکل الفاظ تو نہیں ہے لیکن سمجھ نہیں آیا۔ مجھے سمجھ نا آنے کی وجہ تو یہ ہو سکتی ہے کہ کمپیوٹر چلا لیتے ہیں پروگرامنگ کے بارے میں کچھ نہیں جانتے
     
  8. ابن سعید اردو

    ابن سعید اردو محفلین

    مراسلے:
    79
    جھنڈا:
    Pakistan
    موڈ:
    Buzzed
    بجا فرمایا آپ نے۔ عام لوگ شاید جی یو آئی کے استعمال کو ترجیح دیےہیں۔ پہلے میرا بھی یہی حال تھا۔ مگر جب سی ایل آئی کی طاقت کا مجھے اندازہ ہوا تو میں اب سی ایل آئی کو ہی ترجیح دیتا ہوں۔
     
  9. محمد سعد

    محمد سعد محفلین

    مراسلے:
    2,851
    جھنڈا:
    Pakistan
    موڈ:
    Bored
    اچھی کاوش ہے۔ کچھ سوالات:
    ونڈوز پر پائتھن انسٹالیشن کے لیے آپ کیا طریقہ تجویز کرتے ہوتے ہیں؟
    پائتھن 2 استعمال کر رہے ہیں یا پائتھن 3؟
    اس پروگرام کو pyautogui کے کس ورژن کے ساتھ چلا رہے ہیں؟
    ایکسل شیٹ کی ساخت اور فارمیٹنگ کیسی ہو گی؟
    یہاں آپ کو openpyxl اور pyautogui کے بیچ pyperclip کو لانے کی ضرورت کیوں محسوس ہوئی؟
    جب کوئی انسبسکرائیب کرے تو اس کو پراسیس کرنے کا آپ کا طریقہ کیا ہے؟
    پراڈکٹ کی تصویر بھیجنا کوڈ کے کس حصے میں ہینڈل کر رہے ہیں؟
     
    • پسندیدہ پسندیدہ × 1
    • زبردست زبردست × 1
  10. محمد سعد

    محمد سعد محفلین

    مراسلے:
    2,851
    جھنڈا:
    Pakistan
    موڈ:
    Bored
    اور ہاں۔ pyautogui کے علاوہ کس کس لائبریری کو دیکھا تھا اس مقصد کے لیے؟ کن وجوہات کی بنا پر ان کو چھوڑ کر اس کا انتخاب کیا؟
     
    • زبردست زبردست × 1
  11. محمداحمد

    محمداحمد لائبریرین

    مراسلے:
    22,391
    جھنڈا:
    Pakistan
    موڈ:
    Amazed
    حیرت ہے۔ ہمیں تو سی ایل آئی سے صرف یہی پتہ چلتا تھا کہ کال کرنے والا کون ہے اور یہ کہ فون اُٹھانا ہے یا سوتے بن جائیں۔ :)
     
    • پر مزاح پر مزاح × 4
  12. سید رافع

    سید رافع محفلین

    مراسلے:
    1,267
    جھنڈا:
    Pakistan
    موڈ:
    Relaxed
    ایسے کاموں کے لیے سلینیم بہتر نہیں۔ بلاوجہ اتنا کوڈ لکھنا پڑا۔ Selenium (software) - Wikipedia

    ویسے خالص پروگرامنگ سے متعلق جوابات حاصل کرنے کے لیے Stack Overflow - Where Developers Learn, Share, & Build Careers پر سوال اگر آپ پوسٹ کرتے تو منٹوں میں جواب ملتا۔

    یہاں اردو محفل پر اس کے مقصد کے لحاظ سے بحر عروض قافیہ ردیف ادب و شعر سے متعلق جید علماء موجود ہیں۔ :)
     
    آخری تدوین: ‏جون 26, 2020
    • معلوماتی معلوماتی × 1
  13. محمد سعد

    محمد سعد محفلین

    مراسلے:
    2,851
    جھنڈا:
    Pakistan
    موڈ:
    Bored
    اسی لیے پوچھا کہ اور کسی متبادل کے مقابلے پر pyautogui کیوں۔
     
    • متفق متفق × 1
  14. محب علوی

    محب علوی لائبریرین

    مراسلے:
    12,138
    جھنڈا:
    Pakistan
    موڈ:
    Bookworm
    عمدہ کاوش ہے آپ کی اور میں نے آج ہی یہ لڑی دیکھی۔

    محمد سعد نے چند سوالات پوچھے ہیں جو گفتگو کو آگے بڑھائیں گے اور پروگرام میں بہتری لانے میں بھی مدد دیں گے۔
     
    • پسندیدہ پسندیدہ × 1
    • معلوماتی معلوماتی × 1
  15. ابن سعید اردو

    ابن سعید اردو محفلین

    مراسلے:
    79
    جھنڈا:
    Pakistan
    موڈ:
    Buzzed
    شاید اس سوال کا جواب مجھ سے بہتر کوئی دے سکے۔۔۔۔ میں تو خود ابھی پائتھون نیا نیا سیکھ رہا ہوں۔
     
    آخری تدوین: ‏جون 27, 2020
    • پر مزاح پر مزاح × 1
  16. ابن سعید اردو

    ابن سعید اردو محفلین

    مراسلے:
    79
    جھنڈا:
    Pakistan
    موڈ:
    Buzzed
    پائتھون ورژن 3
     
    • پسندیدہ پسندیدہ × 1
  17. ابن سعید اردو

    ابن سعید اردو محفلین

    مراسلے:
    79
    جھنڈا:
    Pakistan
    موڈ:
    Buzzed
    ایکسل فائل کی ساخت کا اندازہ آپ اس تصویر سے لگا سکتے ہیں:
    [​IMG]
     
  18. ابن سعید اردو

    ابن سعید اردو محفلین

    مراسلے:
    79
    جھنڈا:
    Pakistan
    موڈ:
    Buzzed
    ایکسل سے ڈیٹا (موبائل نمبر، نام وغیرہ) کو کلپ بورڈ پر کاپی کرنے کے لیے، بناء ایکسل کھولے۔ پائتھن میں کسی ٹیکس کو کلپ بورڈ پر کاپی کرنے کے لیے برائے راست (بلٹ ان) کوئی طریقہ نہیں ہے (میری محدود معلومات کے مطابق)۔
     
  19. ابن سعید اردو

    ابن سعید اردو محفلین

    مراسلے:
    79
    جھنڈا:
    Pakistan
    موڈ:
    Buzzed
    اس نمبر کو میں مینوئلی جا کر اپنی ایکسل میں بنی ہوئی مارکیٹنگ لسٹ سے ڈیلیٹ کردیتا ہوں تاکہ انھیں دوبارہ کوئی اور میسج ناں جائے۔ پروگرام میں کوئی خودکار طریقہ نہیں بنایا ہے۔
     
  20. ابن سعید اردو

    ابن سعید اردو محفلین

    مراسلے:
    79
    جھنڈا:
    Pakistan
    موڈ:
    Buzzed
    کوڈ:
    def click_on_msg_forward_icon():
        msg_forward_icon_trace = pyautogui.locateOnScreen(msg_forward_icon, confidence=0.5)
        if msg_forward_icon_trace == None:
            # Try to close opened message forward dialog
            pyautogui.press('Esc', presses=2)
            time.sleep(1)
            msg_forward_icon_trace = pyautogui.locateOnScreen(msg_forward_icon, confidence=0.5)
    
            if msg_forward_icon_trace == None:
                #Search for source message, then forward it.
                pyautogui.click(pyautogui.locateOnScreen('main_window_search_box.png', confidence=0.8))
                pyautogui.write('+92 345 0000000')
                time.sleep(1)
                pyautogui.click(pyautogui.locateOnScreen('source_message_sender.png', confidence=0.8))
                time.sleep(0.5)
                msg_forward_icon_trace = pyautogui.locateOnScreen(msg_forward_icon, confidence=0.5)
                
    
    
        pyautogui.click(msg_forward_icon_trace)
                
    
    دراصل اس میں پہلے مینوئلی آپ کو ایک تصویر (یا کوئی بھی ملٹی میڈیا میسج) کسی کو بھیجنا پڑتا ہے۔ پھر بار بار اس ہی میسج کو فورورڈ کیا جا رہا ہے۔ یہ طریقہ وقت بجانےکے لیے کیا ہے۔ ورنہ ہم تصویر کو کلپ بورڈ پر کاپی کرکے واٹس ایپ ویب کے جی یو آئی پر پیسٹ بھی کر سکتے ہیں۔ مگر اس سے ایک تو اپلوڈ ہونے میں وقت لگتا ہے، دوسرا ہمارا انٹرنیٹ ڈیٹا (اگر کسی کا محدود ہو) بھی زیادہ استعمال ہوتا ہے۔

    کوڈ کو دیکھ کر شاید آپ کو اندازہ ہوجائے کہ میسج کس طرح میں فارورڈ کررہا ہو۔ اگر نہیں سمجھ پا رہے تو میں وضاحت کر سکتا ہوں۔

    +923450000000 یہ نمبر دراصل میں نے اپنے حقیقی نمبر سے تبدیل کیا ہے(اپنی پرائیوسی کی بنا پر)۔
     

اس صفحے کی تشہیر