Selenium 與 Python 的結合提供了一個有效率的方式來管理 Instagram 帳號。透過自動化指令碼,可以輕鬆地登入、瀏覽個人檔案、取得追蹤者和粉絲列表,並進一步分析這些資料。此方法能有效率地找出未互相關注的使用者,方便進行後續的互動或管理,例如傳送訊息提醒或取消追蹤。此自動化流程能大幅節省手動操作的時間和精力,對於需要管理大量追蹤者和粉絲的使用者來說,是一個非常實用的工具。

執行工具

要使用這款工具,首先需要安裝最新版本的Chrome Driver,並將其放在指定的路徑中,例如C:\Program Files (x86)\chromedriver.exe。接下來,執行工具的指令碼,輸入你的Instagram使用者名稱稱和密碼。工具就會開始工作,很快地傳回一個列表,顯示出你追蹤但沒有被追蹤回來的使用者。

注意事項

在執行工具之前,請記得下載並安裝所有必要的依賴函式庫,相關的依賴函式庫列表可以在requirements.txt檔案中找到。

使用的模組

這款工具使用了selenium模組,該模組提供了一個簡單的方式來控制瀏覽器的行為,從而實作自動化的Instagram操作。

開發狀態

目前,這款工具已經可以正常工作。但是,由於Instagram前端的變化,可能需要對工具的指令碼進行更新,以確保其正常運作。

程式碼實作

以下是工具的程式碼實作:

from selenium import webdriver
from getpass import getpass
import time

class InstaBot:
    def __init__(self):
        self.username = input('Enter your username:')
        self.pw = getpass('Enter your password(will NOT appear as you type):')
        self.PATH = r"C:\Program Files (x86)\chromedriver.exe"
        self.driver = webdriver.Chrome(self.PATH)

    def start(self):
        time.sleep(2)
        return

    def login(self):
        # 登入Instagram帳戶
        self.driver.get("https://www.instagram.com/accounts/login/")
        self.driver.find_element_by_name("username").send_keys(self.username)
        self.driver.find_element_by_name("password").send_keys(self.pw)
        self.driver.find_element_by_xpath("//button[@type='submit']").click()
        time.sleep(2)
        # 關閉彈出的對話方塊
        self.driver.find_element_by_xpath("//button[@class='aOOlW   HoLwm']").click()
        time.sleep(1)
        self.driver.find_element_by_xpath("//button[@class='aOOlW   HoLwm']").click()

    def get_unfollowed(self):
        # 取得未被追蹤回來的使用者列表
        self.driver.get(f"https://www.instagram.com/{self.username}/")
        time.sleep(2)
        self.driver.find_element_by_xpath("//a[@href='/{}following/']".format(self.username)).click()
        time.sleep(2)
        following = self.driver.find_elements_by_xpath("//div[@class='                _6VtSN     xLCgt      MR45P   ']/span[@class]")
        unfollowed = []
        for user in following:
            user.click()
            time.sleep(1)
            if not self.driver.find_element_by_xpath("//button[@class='                  qv66sw28               ']").text == "Following":
                unfollowed.append(user.text)
            self.driver.back()
            time.sleep(1)
        return unfollowed

# 執行工具
bot = InstaBot()
bot.start()
bot.login()
unfollowed = bot.get_unfollowed()
print(unfollowed)

內容解密:

這段程式碼定義了一個名為InstaBot的類別,該類別包含了使用者名稱稱、密碼、Chrome Driver路徑等屬性。start方法啟動Chrome Driver,login方法登入Instagram帳戶,get_unfollowed方法取得未被追蹤回來的使用者列表。最終,工具會傳回一個列表,顯示出你追蹤但沒有被追蹤回來的使用者。

自動化登入 Instagram

登入程式

首先,我們需要定義一個登入功能,讓程式可以自動化登入 Instagram。這個功能需要使用 Selenium 來模擬使用者互動。

from selenium import webdriver
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

class InstagramBot:
    def __init__(self, username, password):
        self.username = username
        self.password = password
        self.driver = webdriver.Chrome()  # 啟動 Chrome 瀏覽器

    def login(self):
        # 前往 Instagram 登入頁面
        self.driver.get("https://www.instagram.com/accounts/login/")

        # 等待登入表單載入
        user_field = WebDriverWait(self.driver, 10).until(
            EC.presence_of_element_located((By.XPATH, '//*[@id="loginForm"]/div/div[1]/div/label/input'))
        )

        pw_field = self.driver.find_element(By.XPATH, '//*[@id="loginForm"]/div/div[2]/div/label/input')
        login_button = self.driver.find_element(By.XPATH, '//*[@id="loginForm"]/div/div[3]/button/div')

        # 輸入使用者名稱和密碼
        user_field.send_keys(self.username)
        pw_field.send_keys(self.password)

        # 點選登入按鈕
        login_button.click()

        # 等待登入後的頁面載入
        time.sleep(2.5)

        # 關閉「不現在」按鈕
        not_now1 = self.driver.find_element(By.XPATH, '//*[@id="react-root"]/section/main/div/div/div/div/button')
        not_now1.click()

        time.sleep(2)

        # 關閉「不現在」按鈕(第二個)
        not_now2 = self.driver.find_element(By.XPATH, '/html/body/div[4]/div/div/div/div[3]/button[2]')
        not_now2.click()

內容解密:

上述程式碼定義了一個 InstagramBot 類別,包含一個 login 方法。這個方法使用 Selenium 來自動化登入 Instagram 的過程。首先,它會前往 Instagram 的登入頁面,然後等待登入表單載入。接下來,它會輸入使用者名稱和密碼,然後點選登入按鈕。登入後,它會等待頁面載入,然後關閉兩個「不現在」按鈕。

圖表翻譯:

  flowchart TD
    A[啟動瀏覽器] --> B[前往 Instagram 登入頁面]
    B --> C[等待登入表單載入]
    C --> D[輸入使用者名稱和密碼]
    D --> E[點選登入按鈕]
    E --> F[等待登入後的頁面載入]
    F --> G[關閉「不現在」按鈕]
    G --> H[關閉「不現在」按鈕(第二個])]

這個流程圖表現了自動化登入 Instagram 的過程。首先,啟動瀏覽器,然後前往 Instagram 的登入頁面。接下來,等待登入表單載入,然後輸入使用者名稱和密碼。點選登入按鈕後,等待登入後的頁面載入,然後關閉兩個「不現在」按鈕。

Instagram 關注者列表管理

Instagram 是一個社交媒體平臺,讓使用者可以分享照片和影片。管理關注者列表是維護社交媒體形象的重要部分。以下是如何使用 Python 和 Selenium 取得 Instagram 關注者列表的示例。

開啟使用者個人資料頁面

要開始管理關注者列表,首先需要開啟使用者的個人資料頁面。這可以透過找到個人資料連結並點選它來實作。

from selenium import webdriver
import time

class InstagramManager:
    def __init__(self, driver):
        self.driver = driver

    def open_profile(self):
        # 找到個人資料連結並點選
        profile_link = self.driver.find_element_by_xpath(
            '//*[@id="react-root"]/section/main/section/div[3]/div[1]/div/div[2]/div[1]/a')
        profile_link.click()
        time.sleep(2)

開啟關注者列表

開啟個人資料頁面後,需要找到關注者列表連結並點選它。

def open_following(self):
    # 找到關注者列表連結並點選
    following_link = self.driver.find_element_by_xpath(
        '/html/body/div[1]/section/main/div/header/section/ul/li[3]/a')
    following_link.click()

取得關注者列表

現在可以透過滾動列表來取得關注者列表。

def get_following(self):
    # 滾動列表來取得關注者
    xpath = '/html/body/div[4]/div/div/div[2]'
    self.following = self.scroll_list(xpath)

滾動列表

滾動列表是透過模擬捲軸的移動來實作的。

def scroll_list(self, xpath):
    # 滾動列表
    following_list = []
    while True:
        # 找到所有關注者元素
        elements = self.driver.find_elements_by_xpath(xpath + '/div')
        for element in elements:
            # 取得關注者名稱
            name = element.find_element_by_xpath('./div[2]/div[1]/div/div/div').text
            following_list.append(name)
        # 捲軸到列表底部
        self.driver.execute_script('arguments[0].scrollTop = arguments[0].scrollHeight', elements[-1])
        # 等待新元素載入
        time.sleep(1)
        # 檢查是否已經載入所有元素
        new_elements = self.driver.find_elements_by_xpath(xpath + '/div')
        if len(new_elements) == len(elements):
            break
    return following_list

完整程式碼

from selenium import webdriver
import time

class InstagramManager:
    def __init__(self, driver):
        self.driver = driver

    def open_profile(self):
        # 找到個人資料連結並點選
        profile_link = self.driver.find_element_by_xpath(
            '//*[@id="react-root"]/section/main/section/div[3]/div[1]/div/div[2]/div[1]/a')
        profile_link.click()
        time.sleep(2)

    def open_following(self):
        # 找到關注者列表連結並點選
        following_link = self.driver.find_element_by_xpath(
            '/html/body/div[1]/section/main/div/header/section/ul/li[3]/a')
        following_link.click()

    def get_following(self):
        # 滾動列表來取得關注者
        xpath = '/html/body/div[4]/div/div/div[2]'
        self.following = self.scroll_list(xpath)

    def scroll_list(self, xpath):
        # 滾動列表
        following_list = []
        while True:
            # 找到所有關注者元素
            elements = self.driver.find_elements_by_xpath(xpath + '/div')
            for element in elements:
                # 取得關注者名稱
                name = element.find_element_by_xpath('./div[2]/div[1]/div/div/div').text
                following_list.append(name)
            # 捲軸到列表底部
            self.driver.execute_script('arguments[0].scrollTop = arguments[0].scrollHeight', elements[-1])
            # 等待新元素載入
            time.sleep(1)
            # 檢查是否已經載入所有元素
            new_elements = self.driver.find_elements_by_xpath(xpath + '/div')
            if len(new_elements) == len(elements):
                break
        return following_list

# 使用
driver = webdriver.Chrome()
manager = InstagramManager(driver)
manager.open_profile()
manager.open_following()
manager.get_following()
print(manager.following)

內容解密:

上述程式碼示例展示瞭如何使用 Python 和 Selenium 取得 Instagram 關注者列表。首先,需要開啟使用者的個人資料頁面,然後找到關注者列表連結並點選它。接下來,需要滾動列表來取得關注者。滾動列表是透過模擬捲軸的移動來實作的。最後,需要等待新元素載入並檢查是否已經載入所有元素。

Instagram 追蹤者資料擷取

開啟追蹤者頁面

為了擷取Instagram使用者的追蹤者資料,首先需要開啟該使用者的追蹤者頁面。這可以透過使用Selenium WebDriver來實作,以下是相關的程式碼:

def open_followers(self):
    followers_link = self.driver.find_element_by_xpath(
        '//*[@id="react-root"]/section/main/div/header/section/ul/li[2]/a')
    followers_link.click()
    return

擷取追蹤者列表

開啟追蹤者頁面後,需要擷取追蹤者列表。這可以透過使用Selenium WebDriver的find_element_by_xpath方法來實作,以下是相關的程式碼:

def get_followers(self):
    xpath = '/html/body/div[4]/div/div/div[2]'
    self.followers = self.scroll_list(xpath)
    return

滑動滾動框並擷取名稱

為了擷取所有追蹤者的名稱,需要滑動滾動框直到所有專案都被載入。以下是相關的程式碼:

def scroll_list(self, xpath):
    time.sleep(2)
    scroll_box = self.driver.find_element_by_xpath(xpath)
    last_ht, ht = 0, 1
    
    # 繼續滑動直到所有專案都被載入
    while last_ht != ht:
        last_ht = ht
        time.sleep(1)
        ht = self.driver.execute_script(
            'arguments[0].scrollTo(0, arguments[0].scrollHeight);'
            'return arguments[0].scrollHeight;', scroll_box)
    # 擷取所有專案的名稱
    links = scroll_box.find_elements_by_tag_name('a')
    names = [name.text for name in links if name.text != '']
    return names

內容解密:

上述程式碼使用Selenium WebDriver來開啟Instagram使用者的追蹤者頁面,然後擷取追蹤者列表。scroll_list方法用於滑動滾動框並擷取所有專案的名稱。這個方法使用execute_script來滑動滾動框,並使用find_elements_by_tag_name來擷取所有專案的名稱。

圖表翻譯:

  flowchart TD
    A[開啟追蹤者頁面] --> B[擷取追蹤者列表]
    B --> C[滑動滾動框]
    C --> D[擷取所有專案的名稱]
    D --> E[傳回名稱列表]

圖表翻譯:

此圖表展示了Instagram追蹤者資料擷取的流程。首先,開啟追蹤者頁面,然後擷取追蹤者列表。接著,滑動滾動框直到所有專案都被載入,最後擷取所有專案的名稱。

自動化社交媒體好友管理

爬取社交媒體好友列表

在進行社交媒體好友管理之前,需要先爬取好友列表。這可以透過使用 Selenium 等工具來實作。以下是爬取好友列表的示例程式碼:

from selenium import webdriver
from selenium.webdriver.common.by import By

# 建立瀏覽器物件
driver = webdriver.Chrome()

# 開啟社交媒體網頁
driver.get("https://www.example.com")

# 登入社交媒體
username_input = driver.find_element(By.NAME, "username")
username_input.send_keys("your_username")
password_input = driver.find_element(By.NAME, "password")
password_input.send_keys("your_password")
login_button = driver.find_element(By.XPATH, "//button[@type='submit']")
login_button.click()

# 開啟好友列表
friends_button = driver.find_element(By.XPATH, "//a[@href='#friends']")
friends_button.click()

# 爬取好友列表
friends_list = driver.find_elements(By.TAG_NAME, "a")
friends_names = [friend.text for friend in friends_list if friend.text != '']

# 關閉瀏覽器
driver.quit()

return friends_names

篩選不互相關注的好友

在爬取好友列表之後,需要篩選出不互相關注的好友。這可以透過比較好友列表和關注者列表來實作。以下是篩選不互相關注的好友的示例程式碼:

def get_unfollowers(following, followers):
    unfollowers = [x for x in following if x not in followers]
    return unfollowers

following = get_friends_list()
followers = get_followers_list()

unfollowers = get_unfollowers(following, followers)

for name in unfollowers:
    print(name)

自動化好友管理

在篩選出不互相關注的好友之後,可以進行自動化好友管理。例如,可以自動化傳送訊息給不互相關注的好友,或者自動化取消關注不互相關注的好友。以下是自動化好友管理的示例程式碼:

def send_message(unfollowers):
    for name in unfollowers:
        # 傳送訊息給不互相關注的好友
        message = "Hello, " + name + "!"
        send_message_button = driver.find_element(By.XPATH, "//button[@type='submit']")
        send_message_button.click()

def unfollow(unfollowers):
    for name in unfollowers:
        # 取消關注不互相關注的好友
        unfollow_button = driver.find_element(By.XPATH, "//button[@type='submit']")
        unfollow_button.click()

unfollowers = get_unfollowers(following, followers)

send_message(unfollowers)
unfollow(unfollowers)

Mermaid 圖表

  flowchart TD
    A[開始] --> B[爬取好友列表]
    B --> C[篩選不互相關注的好友]
    C --> D[自動化好友管理]
    D --> E[傳送訊息給不互相關注的好友]
    D --> F[取消關注不互相關注的好友]
    E --> G[完成]
    F --> G

圖表翻譯

此圖表展示了自動化社交媒體好友管理的流程。首先,需要爬取好友列表。然後,需要篩選出不互相關注的好友。最後,需要進行自動化好友管理,例如傳送訊息給不互相關注的好友,或者取消關注不互相關注的好友。

從使用者經驗視角來看,分析這個Instagram追蹤者管理工具對使用者經驗的實質影響,可以發現,它有效解決了使用者難以有效管理大量追蹤者和被追蹤者的痛點。透過自動化流程,使用者可以快速找出未回追蹤的使用者,並依據自身需求決定是否取消追蹤,大幅提升了效率。然而,工具的實作高度依賴Instagram網頁前端結構,一旦Instagram改版,程式碼中的XPath等定位資訊就可能失效,需要頻繁更新維護,這對非技術背景的使用者來說是一大挑戰。

技術限制深析顯示,目前工具主要透過 Selenium 模擬瀏覽器操作,效率相對較低,且容易被Instagram偵測為機器人行為,存在帳號被封鎖的風險。此外,程式碼中大量使用XPath進行元素定位,不夠健壯,容易受網頁結構變動影響。未來可以考慮整合Instagram官方API,或使用更穩定的網頁抓取技術,提升工具的可靠性和效率。同時,程式碼的模組化設計和錯誤處理機制也需要加強,提升程式碼的可維護性和穩定性。

展望未來,隨著社交媒體平臺的持續發展,這類自動化管理工具的需求將持續增長。預計未來會出現更多功能更豐富、更穩定可靠的工具,例如整合資料分析功能,提供更深入的追蹤者洞察,或加入自動互動功能,提升使用者 engagement。同時,更隱蔽的網頁抓取技術和更智慧的機器人行為模擬也將成為技術發展的重點方向。

玄貓認為,儘管此工具目前仍存在一些技術限制,但其提供的核心價值已得到驗證。對於需要管理大量Instagram追蹤者的使用者來說,它是一個值得嘗試的工具。開發者也應持續關注Instagram平臺的變化,並積極探索更先進的技術方案,以提升工具的長期穩定性和使用者經驗。