Instagram网页自动化:获取私信发送者文本失败求助
解决Selenium无法定位Instagram私信发送者元素的问题
问题原因
你用By.CLASS_NAME传入多个类名的写法是错误的——By.CLASS_NAME仅支持单个类名,多个类名会被当作一个完整的类名去匹配,自然找不到对应元素。另外你当前代码里用send_keys(Keys.RETURN)是触发回车操作,而你的需求是获取私信发送者的文本内容,这部分逻辑也不对。
解决方案
- 改用CSS选择器定位:把多个类名用
.连接(注意去除类名间的多余空格),这是定位多类名元素的正确方式 - 添加显式等待:确保元素加载完成后再进行操作,比硬等待更高效可靠
- 获取元素文本:通过
.text属性提取私信发送者的内容
修改后的代码
from selenium.webdriver.chrome.options import Options 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 opt = Options() opt.add_experimental_option("debuggerAddress", "localhost:1234") driver = webdriver.Chrome(executable_path="C:\Program Files (x86)\chromedriver.exe", options=opt) # 显式等待元素可见,最长等待10秒 wait = WebDriverWait(driver, 10) sender_element = wait.until(EC.visibility_of_element_located( (By.CSS_SELECTOR, "._ab8w._ab94._ab97._ab9f._ab9k._ab9p._ab9_.aba8._abcm") )) # 获取私信发送者的文本内容并打印 sender_text = sender_element.text print("私信发送者:", sender_text)
额外说明
- 如果元素在iframe内,需要先切换到iframe再定位:
driver.switch_to.frame("iframe_id_or_name")(如果没有ID/name,也可以用元素定位iframe) - Instagram的类名会不定期更新,如果后续再次出现定位失败,需要重新检查页面元素的最新类名
内容的提问来源于stack exchange,提问作者Ali Moradi
相关产品推荐
相关产品推荐

