Selenium爬取Instagram时未注册账号持续显示“Something went wrong...”
修复建议
绕过Selenium自动化检测:Instagram近期大概率强化了反爬机制,识别出你使用了WebDriver。可以通过以下方式伪装:
- 添加禁用自动化检测的浏览器参数(以Chrome为例):
from selenium import webdriver options = webdriver.ChromeOptions() # 禁用自动化控制提示 options.add_argument('--disable-blink-features=AutomationControlled') options.add_experimental_option("excludeSwitches", ["enable-automation"]) options.add_experimental_option('useAutomationExtension', False) driver = webdriver.Chrome(options=options) - 手动篡改
navigator.webdriver属性,避免被页面脚本识别:driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})")
- 添加禁用自动化检测的浏览器参数(以Chrome为例):
更新页面元素定位逻辑:既然页面HTML和XPath已变更,必须重新适配:
- 打开浏览器开发者工具,针对需要爬取的内容,重新生成稳定的定位器——优先用带固定特征的CSS选择器(比如包含静态class的),避免依赖动态生成的ID或绝对路径XPath。
- 示例:用
//div[contains(@class, 'x1n2onr6') and text()='Posts']替代旧的绝对XPath。
模拟真实用户行为与环境:
- 配置真实的User-Agent:从你正常访问Instagram的浏览器中复制UA字符串,添加到ChromeOptions:
options.add_argument('user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36') - 加载本地浏览器配置文件:直接复用你正常访问的Chrome用户数据,让爬虫环境和真实浏览器一致:
options.add_argument(r"user-data-dir=C:\Users\你的用户名\AppData\Local\Google\Chrome\User Data") options.add_argument(r"profile-directory=Default") - 添加随机延迟:在页面加载、操作之间加入1-3秒的随机等待,模拟人类浏览节奏:
import time import random time.sleep(random.uniform(1, 3))
- 配置真实的User-Agent:从你正常访问Instagram的浏览器中复制UA字符串,添加到ChromeOptions:
排查IP封禁风险:如果你的爬虫请求频率过高,可能被Instagram限制IP:
- 切换高质量住宅代理IP,避免使用数据中心IP(这类IP容易被标记)。
- 降低请求频率,比如每爬取1个账号后等待5-10秒,避免短时间内大量请求。
考虑官方API替代方案:如果需求是获取公开账号的合规数据,Instagram Graph API是更稳定的选择——虽然需要申请开发者权限,但不会因为页面结构变更而失效,也能避免反爬限制。
内容的提问来源于stack exchange,提问作者mochiiiii8910
相关产品推荐
相关产品推荐

