Python İnstagram Selenium Takipçi Çekme

Arkadaşlar merhaba selenium ile instagram takipçilerimi çekmeye çalışıyorum, şöyle işliyor browserdan takipçilerime tıklayıp listeyi aşağı indirip gördüklerini kaydediyor. Fakat aşağı kaydırma işlemi zamanla aşırı derecede yavaşlıyor ve 4 saatte ancak 4k takipçiyi listeye çekiyor.

Herhangi bir şekilde tüm takipçileri daha hızlı alabileceğim bir yol var mı? Bedava internet sitesi veya python selenium yolu da olabilir.

Kod zaten üstte anlattığım şekilde-kaydıra kaydıra alarak listeye eklemekten ibaret, instagram sitesi dolayısıyla zamanla kaydırma işlemi çok yavaşlıyor- o yüzden yazmadım.

Teşekkürler

Merhaba.

API’yı olan web sitelerinde web otomasyonu yerine el verdiğince bu API’yı kullanmak size kolaylık sağlayacaktır. Sanırım istediğinizi buradaki gibi yapabilirsiniz:

Edit: sanırım linkteki çoğu endpoint kullanımdan kaldırılmış, istediğiniz veriyi elde etmenin instagram tarafından sunulan bir yolu şuanda yok gibi duruyor.

2 Beğeni

Evet maalesef instagram veri vermiyor. Veriyi browserı otomatikleştirerek çekebiliyorum fakat bu işlem belki günler alacak kadar uzuyor takipçi sayısına göre. Bazı 3. Parti otomatikleştirme uygulamaları takipçi listesini kısa sürede elde edebiliyor ama nasıl bunu bulamadım. Teşekkürler cevabınız için.

Tersine mühendislik kullanıyorlardır diye tahmin ediyorum.

1 Beğeni
import hashlib
import hmac
import json
import random
import time
import urllib
import uuid

import requests

SIG_KEY_VERSION = "4"
IG_SIG_KEY = "46024e8f31e295869a0e861eaed42cb1dd8454b55232d85f6c6764365079374b"

USER_AGENT = "Instagram 136.0.0.34.124 Android (23/6.0.1; 640dpi; 1440x2560; ZTE; ZTE A2017U; ailsa_ii; qcom; en_US; 208061712)"
REQUEST_HEADERS = {
    "X-IG-App-Locale": "en_US",
    "X-IG-Device-Locale": "en_US",
    "X-IG-Mapped-Locale": "en_US",
    "X-Pigeon-Session-Id": "d0a3c6b0-24fd-428c-9d20-624a839f7f08",
    "X-Pigeon-Rawclienttime": str(round(time.time() * 1000)),
    "X-IG-Connection-Speed": "-1kbps",
    "X-IG-Bandwidth-Speed-KBPS": str(random.randint(7000, 10000)),
    "X-IG-Bandwidth-TotalBytes-B": str(random.randint(500000, 900000)),
    "X-IG-Bandwidth-TotalTime-MS": str(random.randint(50, 150)),
    "X-IG-App-Startup-Country": "US",
    "X-Bloks-Version-Id": "0a3ae4c88248863609c67e278f34af44673cff300bc76add965a9fb036bd3ca3",
    "X-IG-WWW-Claim": "hmac.AR1ETv6FsubYON5DwNj_0CLNmbW7hSNR1yIMeXuhHJORN4n7",
    "X-Bloks-Is-Layout-RTL": "false",
    "X-Bloks-Enable-RenderCore": "false",
    "X-IG-Connection-Type": "WIFI",
    "X-IG-Capabilities": "3brTvwM=",
    "X-IG-App-ID": "567067343352427",
    "Accept-Language": "en-US",
    "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
    "Accept-Encoding": "gzip, deflate",
    "Host": "i.instagram.com",
    "X-FB-HTTP-Engine": "Liger",
    "Connection": "close",
    "X-IG-Prefetch-Request": "foreground",
}


def create_session(cookies=None):
    session = requests.session()
    session.headers.update(REQUEST_HEADERS)
    session.headers.update({"User-Agent": USER_AGENT})

    if cookies:
        session.cookies.update(cookies)

    return session


def get_seed(*args):
    m = hashlib.md5()
    m.update(b"".join([arg.encode("utf-8") for arg in args]))

    return m.hexdigest()


def generate_device_id(seed):
    volatile_seed = "12345"
    m = hashlib.md5()
    m.update(seed.encode("utf-8") + volatile_seed.encode("utf-8"))

    return "android-" + m.hexdigest()[:16]


def generate_signature(data):
    body = (
        hmac.new(
            IG_SIG_KEY.encode("utf-8"), data.encode("utf-8"), hashlib.sha256
        ).hexdigest()
        + "."
        + urllib.parse.quote(data)
    )
    signature = f"signed_body={body}&ig_sig_key_version={SIG_KEY_VERSION}"

    return signature


def login(username, password):
    phone_id = str(uuid.uuid4())
    _uuid = str(uuid.uuid4())

    device_id = generate_device_id(get_seed(username, password))

    session = create_session()
    r = requests.get("https://www.instagram.com/")
    csrftoken = r.cookies["csrftoken"]

    data = json.dumps(
        {
            "jazoest": str(random.randint(22000, 22999)),
            "country_codes": '[{"country_code":"1","source":["default"]}]',
            "phone_id": phone_id,
            "_csrftoken": csrftoken,
            "username": username,
            "adid": "",
            "guid": _uuid,
            "device_id": device_id,
            "google_tokens": "[]",
            "password": password,
            "login_attempt_count": "1",
        }
    )

    post = generate_signature(data)

    response = session.post("https://i.instagram.com/api/v1/accounts/login/", data=post)
    json_data = response.json()

    if json_data.get("status") == "ok":
        return session.cookies

    else:
        return False


def get_user_id(username, session):
    url = f"https://i.instagram.com/api/v1/users/{username}/usernameinfo/"
    res = session.get(url)

    json_data = res.json()

    return json_data["user"]["pk"]


def get_followers(user_id, _uuid, session):
    url = f"https://i.instagram.com/api/v1/friendships/{user_id}/followers/"
    max_id = " "
    usernames = []

    while max_id:
        if max_id and not max_id.isspace():
            payload = {"rank_token": f"{user_id}_{_uuid}", "max_id": max_id}
        else:
            payload = {"rank_token": f"{user_id}_{_uuid}"}

        res = session.get(url, params=payload)

        json_data = res.json()
        users = json_data["users"]

        for user in users:
            usernames.append(user["username"])

        max_id = json_data.get("next_max_id", False)

    return usernames


if __name__ == "__main__":
    cookies = login("USER", "PASS")

    session = create_session(cookies)

    username = "USERNAME"

    user_id = get_user_id(username, session)
    _uuid = str(uuid.uuid4())

    followers = get_followers(user_id, _uuid, session)

    with open("followers.txt", "w") as file:
        for username in followers:
            file.write(username + "\n")

Merhaba. Instagramdan takipçileri almak için api kullanabilirsiniz fakat biraz zahmetli çünkü doğru user agent girmeniz ve instagrama giriş yapmanız gerekli. Burada gerekli yerleri doldurarak kullanabilirsiniz ama giriş yaparken iki faktörlü korumanızın kapalı olması lazım.

Bu arada bu kodları instabot aracından aldım.

(Kod biraz karmaşık duruyor ama yapacak pek bir şey yok açıkcası.)

1 Beğeni

Verdiğiniz reponun README dosyasında bu kodları kullananların instagram tarafından kolayca yakalanıp banlanabileceğini söylüyor.

1 Beğeni

Doğrudur.

Ben giriş yapmak için olan kısmı kendi yazdığım bir program için daha önceden kullanmıştım. Orda da giriş yaptıktan sonra cookie’leri kaydettiğim için bir sorun yaşanacağını zannetmiyorum. Yani tek seferlik kullanıyorum. Burada sadece get_user_id ve get_followers fonksiyonlarını ekledim. Bunları eklerken de README ye dikkat etmedim açıkçası.

2 Beğeni

merhaba öncelikle cevabınız için teşekkürler kodu deneyeceğim fakat çok karışık geldi örneğin headers kısmı kalabalık geldi tümünü doldurmak zorunda mıyız veya tam olarak neleri değiştirmemiz gerekiyor kodda onu anlayamadım örneğin IS_SIG_KEY?

if __name__ == "__main__": den sonrasını değişmeniz gerek, büyük harfelerle yazılan yerleri. login fonksiyonu içerisine kendi kullanıcı adı şifrenizi username değişkenine de takipçilerini almak istediğiniz hesabın kullanıcı adını girmeniz gerek. if bloğunun üst kısmı sabit oraları ellemenize gerek yok.