Очистка комментариев Instagram с использованием Selenium - Selenium не загружает более 15 комментариев Instagram [закрытPython

Программы на Python
Ответить
Anonymous
 Очистка комментариев Instagram с использованием Selenium - Selenium не загружает более 15 комментариев Instagram [закрыт

Сообщение Anonymous »

Я работаю над парсером Instagram на основе Selenium (в учебных целях) и пытаюсь извлечь первые 20 комментариев из сообщения.

Однако Selenium всегда возвращает только 15 комментариев, даже если сообщение содержит сотни.
Проблема
Я всегда получаю только ~15 комментариев, хотя сообщение содержит сотни сотни.
Похоже, проблема в этой строке:
Весь код:

Код: Выделить всё

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
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

# ---------------- CONFIG ----------------
SELENIUM_PROFILE_PATH = r"C:\\Users\\kogre\\AppData\\Local\\Google\\Chrome\\User Data\\SeleniumProfile"
ACCOUNT_URL = "https://www.instagram.com/therock/"

# ---------------- DRIVER ----------------
options = webdriver.ChromeOptions()
options.add_argument(f"user-data-dir={SELENIUM_PROFILE_PATH}")
options.add_argument("--start-maximized")

driver = webdriver.Chrome(
service=Service(ChromeDriverManager().install()),
options=options
)

wait = WebDriverWait(driver, 20)

# ---------------- OPEN ACCOUNT ----------------
driver.get(ACCOUNT_URL)
time.sleep(3)

# ---------------- OPEN FIRST POST ----------------
first_post = wait.until(
EC.element_to_be_clickable(
(By.XPATH, "(//a[contains(@href,'/p/') or contains(@href,'/reel/')])[1]")
)
)
first_post.click()
time.sleep(2)

# ---------------- CLICK Load more comments ----------------
# This never finds anything
while True:
try:
load_more_btn = wait.until(
EC.element_to_be_clickable(
(By.XPATH, "//button[.//title[normalize-space(text())='Load more comments']]")
)
)
driver.execute_script("arguments[0].click();", load_more_btn)
time.sleep(1)
except:
break  # No more button found

# ---------------- GET COMMENTS ----------------
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "li._a9zj")))

comment_items = driver.find_elements(By.CSS_SELECTOR, "li._a9zj")
real_comments = comment_items[1:]   # remove caption

username_selectors = ["h3 a", "h2 a", "a.x1i10hfl", "a[role='link']"]

results = []
max_comments = min(20, len(real_comments))

for i in range(max_comments):
block = real_comments[i]
username = None
for sel in username_selectors:
try:
el = block.find_element(By.CSS_SELECTOR, sel)
if el.text.strip():
username = el.text.strip()
break
except:
pass
if not username:
try:
username = block.find_element(By.TAG_NAME, "a").text.strip()
except:
username = "UNKNOWN"

try:
text = block.find_element(By.CSS_SELECTOR, "span._ap3a").text.strip()
except:
text = ""

results.append((username, text))

print(results)

driver.quit()
Я думаю, проблема в этом фрагменте кода

Код: Выделить всё

# open post...
load_more_btn = wait.until(
EC.element_to_be_clickable(
(By.XPATH, "//button[.//title[normalize-space(text())='Load more comments']]")
)
)
driver.execute_script("arguments[0].click();", load_more_btn)
# then get comments: driver.find_elements(By.CSS_SELECTOR, "li._a9zj")
Чего я ожидаю
Способ загрузить больше комментариев, чтобы Selenium мог собрать более 20 комментариев.
Что я подозреваю
По какой-то причине Selenium не может добраться до кнопки загрузить больше комментариев из-за неправильного кода выбора CSS
Вопрос
Какой правильный селектор CSS/XPath для элемента «Загрузить больше комментариев» в текущем веб-интерфейсе Instagram?
Или Instagram заменил кнопку системой прокрутки для загрузки?
Любой обновленный рабочий селектор или подход может помочь. Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/798 ... than-15-in
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»