最終更新日: 2024/01/03

SNSプログラミング・インスタツール運用

アンフォローツールのコード

アンフォローツールコードを載せました。

こういう風に作っています。

質問あればコメントください。

                                Python
                                                                from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from time import sleep
import time
import getpass
from selenium.webdriver.common.action_chains import ActionChains
import tkinter,tkinter.font
import os
from selenium.webdriver.common.keys import Keys
import random
import bs4 
from datetime import date,timedelta
from tkinter import messagebox

#区切り線#
split_line = "-" * 50
global liker
global liker_list
file_path = "profile_list.txt"


# --------------login_process-----------------
def button_click():

    profile_name= input_profile_name.get()
    password= input_password.get()
    scroll = input_scroll.get()

    driver = webdriver.Chrome(ChromeDriverManager().install())


    #instagramにアクセス
    driver.get("https://www.instagram.com/accounts/login/")
    driver.implicitly_wait(10)
    sleep(1)
    #ログインID・PWを入力
    elem_search_word = driver.find_element_by_name("username")
    elem_search_word.send_keys(profile_name)
    sleep(1)
    ppassword= driver.find_element_by_name('password')
    ppassword.send_keys(password)
    sleep(1)
    ppassword.send_keys(Keys.ENTER)
    driver.implicitly_wait(10)
    sleep(4) 
    #2段階認証の保存を選択
    elem_search_word = driver.find_element_by_css_selector("button.sqdOP").click()
    driver.implicitly_wait(5)
    sleep(3)
    #ポップアップの後でを選択
    elem_search_word = driver.find_element_by_css_selector("button.aOOlW").click()
    driver.implicitly_wait(2)
    sleep(1)

    #----読み込み---

    with open(file_path, "r",encoding="utf-8") as tf: 
        before_liker_list = tf.read().splitlines()
    print(split_line)
    print(f'過去のフォロワーは')
    print(len(before_liker_list))

    url = f'https://www.instagram.com/{profile_name}/'
    driver.get(url)
    driver.implicitly_wait(15)
    driver.find_elements_by_css_selector("li.Y8-fY")[1].click()
    sleep(3)
    li = driver.find_element_by_css_selector("div.isgrP")
    # 自動スクロール
    for i in range(int(scroll)): #スクロールさせたいかを入力 10スクロールで58人 100スクロールで580人 1000スクロールで5800人
        driver.execute_script("arguments[0].scrollTop = arguments[0].scrollHeight", li)
        time.sleep(random.randint(500,1000)/1000)
    page_url = driver.page_source
    soup = bs4.BeautifulSoup(page_url,"lxml")
    elm = soup.find_all(class_="Jv7Aj mArmR MqpiF")
    # フォロワーリスト化
    after_liker_list = []
    for e in elm:
        after_liker_list.append(e.text)
    # フォロワー名表示
    # print("リスト化したフォロワーを全表示します")
    print(split_line)
    list(set(after_liker_list))
    print(f'現在のフォロワーは')
    print(len(after_liker_list))

    result_liker_list = list(set(after_liker_list) - set(before_liker_list))
    print(split_line)
    print(f'抜けたフォロワーは')
    print(len(result_liker_list))
    if len(result_liker_list) ==0 :
        print("フォロー解除は0でした")

    for i in result_liker_list:
        driver.get(f'https://www.instagram.com/{i}/')
        driver.implicitly_wait(10)
        sleep(3)
        try:
            profile = driver.find_element_by_xpath("//*[@id='react-root']/section/main/div/header/section").text
            print(split_line)
            print(f'https://www.instagram.com/{i}/')
            print(profile)
            print(split_line)
            driver.implicitly_wait(10)


        except:
            pass
    # join()で要素内容を結合
    # after_liker_list = "\n".join(after_liker_list)
    after_liker_list = "\n".join(after_liker_list)

    with open(file_path, "w", encoding="utf-8") as f:
        f.write(after_liker_list)
        f.close()
        # for data in after_liker_list:
        #     f.write("%s\n" % data)
    driver.close()





   
   
#ウインドウの作成
root = tkinter.Tk()
root.title("Insta_unfollower_checker GUI")
root.geometry("250x130")


font=tkinter.font.Font(
    root,size =10
)


# ID label
input_profile_name_label = tkinter.Label(text="ID" ,font=font)
input_profile_name_label.grid(row=1, column=1, padx=10,)

# input_ID
input_profile_name = tkinter.Entry(width=20)
input_profile_name.grid(row=1, column=2)


# PASSWORD
input_password_label = tkinter.Label(text="PASS")
input_password_label.grid(row=2, column=1, padx=10,)

# PASWORD欄の作成
input_password = tkinter.Entry(show="*",width=20)
input_password.grid(row=2, column=2)



# scroll
input_scroll_label = tkinter.Label(text="scroll")
input_scroll_label.grid(row=3, column=1, padx=10,)

# scroll欄の作成
input_scroll = tkinter.Entry(width=20)
input_scroll.grid(row=3, column=2)

input_scroll_text_label = tkinter.Label(text="10スクロールで93人\n100スクロールで930人\n1000スクロールで9300人")
input_scroll_text_label.grid(row=4, column=2, padx=10,)


#ボタンの作成
button = tkinter.Button(text="実行",command=button_click)
button.place(x=10, y=80)

#ウインドウの描画
root.mainloop()