You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Selenium获取Instagram数据:get_basic_info方法故障求助

问题解决步骤

1. 修复代码语法错误

get_basic_info方法里第一行元素定位代码遗漏了self,属于低级语法错误:

# 错误写法
follower_count_element = .browser.find_element(...)
# 正确写法
follower_count_element = self.browser.find_element(...)

2. 绕过Instagram自动化检测

Instagram会识别默认ChromeDriver的自动化特征,导致页面显示"A problem has occurred"。需配置ChromeOptions隐藏这些特征:

from selenium.webdriver.chrome.options import Options

def __init__(self, username, password):
    chrome_options = Options()
    # 隐藏自动化提示
    chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])
    chrome_options.add_experimental_option('useAutomationExtension', False)
    # 模拟正常用户代理
    chrome_options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.5993.71 Safari/537.36")
    # 禁用Blink自动化特性
    chrome_options.add_argument("--disable-blink-features=AutomationControlled")
    self.browser = webdriver.Chrome(options=chrome_options)

3. 改用稳定的元素定位方式

Instagram的class是动态生成的,会定期变化,不能依赖固定class定位。可通过元素文本、链接特征来定位:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

def get_basic_info(self):
    self.sign_in()
    self.browser.get(f'https://www.instagram.com/{self.username}/')
    wait = WebDriverWait(self.browser, 15)
    
    # 定位帖子数(适配土耳其语界面)
    post_count = wait.until(EC.presence_of_element_located(
        (By.XPATH, '//span[contains(text(), "Gönderiler")]/preceding-sibling::span')
    )).text
    
    # 定位粉丝数(取title属性获取完整数字,避免页面显示缩写)
    follower_count = wait.until(EC.presence_of_element_located(
        (By.XPATH, '//a[contains(@href, "/followers/")]/span')
    )).get_attribute('title')
    
    # 定位关注数
    following_count = wait.until(EC.presence_of_element_located(
        (By.XPATH, '//a[contains(@href, "/following/")]/span')
    )).text

4. 调整登录流程

原sign_in方法末尾调用了self.browser.close(),导致后续get_basic_info执行时浏览器已关闭,需移除该代码,并优化登录等待逻辑:

def sign_in(self):
    self.browser.get("https://www.instagram.com/accounts/login/")
    wait = WebDriverWait(self.browser, 15)
    
    # 显式等待输入框加载完成
    user_name_entry = wait.until(EC.presence_of_element_located((By.NAME, "username")))
    user_password_entry = wait.until(EC.presence_of_element_located((By.NAME, "password")))
    
    user_name_entry.send_keys(self.username)
    user_password_entry.send_keys(self.password, Keys.ENTER)
    
    # 跳过"保存登录信息"提示
    try:
        wait.until(EC.element_to_be_clickable((By.XPATH, '//div[text()="Şimdi Değil"]'))).click()
    except:
        pass

完整修正代码

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

class Instagram_Data():

    def __init__(self, username, password):
        chrome_options = Options()
        chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])
        chrome_options.add_experimental_option('useAutomationExtension', False)
        chrome_options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.5993.71 Safari/537.36")
        chrome_options.add_argument("--disable-blink-features=AutomationControlled")
        self.browser = webdriver.Chrome(options=chrome_options)
        self.main_url = "https://www.instagram.com/"
        self.password = password
        self.username = username

    def sign_in(self):
        self.browser.get("https://www.instagram.com/accounts/login/")
        wait = WebDriverWait(self.browser, 15)
        
        user_name_entry = wait.until(EC.presence_of_element_located((By.NAME, "username")))
        user_password_entry = wait.until(EC.presence_of_element_located((By.NAME, "password")))
        
        user_name_entry.send_keys(self.username)
        user_password_entry.send_keys(self.password, Keys.ENTER)
        
        try:
            wait.until(EC.element_to_be_clickable((By.XPATH, '//div[text()="Şimdi Değil"]'))).click()
        except:
            pass
    
    def get_basic_info(self):
        self.sign_in()
        self.browser.get(f'https://www.instagram.com/{self.username}/')
        wait = WebDriverWait(self.browser, 15)
        
        post_count = wait.until(EC.presence_of_element_located(
            (By.XPATH, '//span[contains(text(), "Gönderiler")]/preceding-sibling::span')
        )).text
        
        follower_count = wait.until(EC.presence_of_element_located(
            (By.XPATH, '//a[contains(@href, "/followers/")]/span')
        )).get_attribute('title')
        
        following_count = wait.until(EC.presence_of_element_located(
            (By.XPATH, '//a[contains(@href, "/following/")]/span')
        )).text
        
        print(f'Takipçi Sayısı: {follower_count}')
        print(f'Takip Sayısı: {following_count}')
        print(f'Gönderi Sayısı: {post_count}')
        self.browser.close()


object = Instagram_Data("你的用户名", "你的密码")
object.get_basic_info()

关键说明

  • 用显式等待替代sleep,避免因网络延迟导致的元素加载失败问题
  • 隐藏自动化特征是绕过Instagram反爬检测的核心
  • 基于文本、链接特征的定位方式,不受Instagram前端class更新影响

内容的提问来源于stack exchange,提问作者mahdi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 19:14:55