Selenium WebDriver не может прокручивать сайт pure.appPython

Программы на Python
Anonymous
Selenium WebDriver не может прокручивать сайт pure.app

Сообщение Anonymous »

Я пытаюсь автоматизировать взаимодействие с веб-сайтом pure.app с помощью Selenium WebDriver на Python. Основная цель — автоматически лайкать публикации на сайте, но для этого мне нужно иметь возможность прокручивать страницу для загрузки нового контента.
Однако я столкнулся с проблема, из-за которой функция прокрутки не работает должным образом. Я попробовал несколько подходов, в том числе:
  • Использование driver.execute_script("window.scrollBy(0, 500)") для прокрутки страницу на 500 пикселей.
  • Использование ActionChains(driver).send_keys(Keys.PAGE_DOWN).perform() для имитации нажатия клавиши Page Down.
  • Реализация специальной функции Smooth_scroll(), которая постепенно прокручивает страницу с использованием интервала JavaScript.
Несмотря на эти попытки, страница вообще не прокручивается, а содержимое остается статичным. Код выполняется без ошибок, но содержимое страницы не меняется.
Я проверил структуру сайта и не обнаружил явных препятствий для прокрутки, таких как динамическая загрузка контента или бесконечная прокрутка. Содержимое страницы выглядит статическим и его можно прокручивать.
Можете ли вы помочь мне определить основную причину этой проблемы и предложить решение для успешной прокрутки веб-сайта pure.app с помощью Selenium WebDriver?
Код

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

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

# Настройка опций Chrome
chrome_options = Options()
chrome_options.add_argument("--disable-blink-features=AutomationControlled")
chrome_options.add_argument("--no-sandbox")
chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])
chrome_options.add_experimental_option('useAutomationExtension', False)

# Путь к ChromeDriver
chrome_driver_path = r'C:\chromedriver-win64\chromedriver.exe'

# Инициализация драйвера
service = Service(chrome_driver_path)
driver = webdriver.Chrome(service=service, options=chrome_options)

# Установка размера окна браузера
driver.set_window_size(1920, 1080)

# Функция для поиска и нажатия кнопки "лайк"
def find_and_click_like_button():
like_button_selector = "div.sc-nukQN button.sc-koXPp.sc-bmzYkS:nth-child(3)"
try:
like_button = WebDriverWait(driver, 5).until(
EC.presence_of_element_located((By.CSS_SELECTOR, like_button_selector))
)
# Проверяем, не был ли уже поставлен лайк
svg = like_button.find_element(By.TAG_NAME, "svg")
if "fill: red" not in svg.get_attribute("outerHTML"):
driver.execute_script("arguments[0].click();", like_button)
print("Кнопка 'лайк' нажата.")
return True
else:
print("Лайк уже поставлен, пропускаем.")
return False
except Exception as e:
print(f"Кнопка 'лайк' не найдена или не может быть нажата: {e}")
return False

# Функция для плавной прокрутки
def smooth_scroll(distance):
script = f"""
var current = 0;
var interval = setInterval(function() {{
window.scrollBy(0, 10);
current += 10;
if (current >= {distance}) clearInterval(interval);
}}, 20);
"""
driver.execute_script(script)

try:
# Открываем страницу входа Google
driver.get("https://accounts.google.com/")

# Ввод email
email_input = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CSS_SELECTOR, "input[type='email']"))
)
email_input.send_keys("XXXXXXXXXXXXXXXXXX")
email_input.send_keys(Keys.RETURN)
print("Email введен.")

# Добавляем паузу после ввода логина
time.sleep(10)
print("Ожидание 10 секунд после ввода email.")

# Ожидание и ввод пароля
password_input = WebDriverWait(driver, 20).until(
EC.presence_of_element_located((By.CSS_SELECTOR, "input[type='password']"))
)
password_input.send_keys("XXXXXXXXXXXXXXXX")
print("Пароль введен.")

# Ожидание кнопки "Далее"  после ввода пароля
next_button = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, "//button[@jsname='LgbsSe']//span[text()='Далее']"))
)
driver.execute_script("arguments[0].click();", next_button)
print("Кнопка 'Далее' нажата.")

# Ожидание завершения входа
time.sleep(15)
print("Вход в Google выполнен.")

# Переход на pure.app
driver.get("https://pure.app/ru/")
print("Переход на pure.app выполнен.")

# Ожидание загрузки страницы
WebDriverWait(driver, 30).until(
EC.presence_of_element_located((By.ID, "hamburger-btn"))
)

# Клик по кнопке меню
hamburger_button = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.ID, "hamburger-btn"))
)
driver.execute_script("arguments[0].click();", hamburger_button)
print("Клик по кнопке меню выполнен.")

# Клик по кнопке SIGN IN
sign_in_button = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.ID, "menu-sign-in"))
)
driver.execute_script("arguments[0].click();", sign_in_button)
print("Клик по кнопке SIGN IN выполнен.")

# Клик по кнопке "С Google"
google_login_button = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, "//button[contains(@class, 'block uppercase h-[49px]') and contains(., 'С google')]"))
)
driver.execute_script("arguments[0].click();", google_login_button)
print("Клик по кнопке 'С Google' выполнен.")

print("Вход на pure.app выполнен.")

# Ожидание загрузки страницы после входа
time.sleep(10)
print("Ожидание 10 секунд после входа.")

# Нажатие кнопки "РАЗРЕШИТЬ"
try:
allow_button = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, "//a[contains(@class, 'sc-dtInlm') and contains(@class, 'sc-kGCWdC')]//span[text()='РАЗРЕШИТЬ']"))
)
driver.execute_script("arguments[0].click();", allow_button)
print("Кнопка 'РАЗРЕШИТЬ' нажата.")
except Exception as e:
print(f"Не удалось нажать кнопку 'РАЗРЕШИТЬ': {e}")

# Дополнительное ожидание после нажатия "РАЗРЕШИТЬ"
time.sleep(5)

# Основной цикл для постоянного лайканья
scroll_distance = 0
while True:
# Поиск и нажатие кнопки "лайк"
if find_and_click_like_button():
time.sleep(1)  # Пауза после успешного лайка

# Эмуляция плавной прокрутки с помощью JavaScript
smooth_scroll(500)
print("Прокрутка страницы на 500 пикселей.")
time.sleep(2)  # Ожидание загрузки новых анкет

# Проверка на желание пользователя остановить процесс
user_input = input("Нажмите Enter для продолжения или введите 'stop' для остановки: ")
if user_input.lower() == 'stop':
print("Процесс остановлен пользователем.")
break

except Exception as e:
print("Ошибка:", e)

# Ожидание ввода перед закрытием
input("Нажмите Enter для завершения...")

# Закрытие браузера
driver.quit()
Будем очень признательны за любые идеи и предложения.

Подробнее здесь: https://stackoverflow.com/questions/790 ... pp-website

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