Как заставить reddit регистрировать голоса при входе в систему через selenium?

#python #selenium #google-chrome #selenium-webdriver #bots

#python #селен #google-chrome #selenium-webdriver #боты

Вопрос:

Итак, я пытаюсь реализовать программу, использующую selenium, которая голосует за верхний пост в моем основном частном субреддите. До сих пор мне удавалось реализовать вход в систему и нажатие кнопки upvote, но голоса фактически не регистрируются на Reddit, насколько я могу видеть. Я довольно новичок в python и изучил большинство основ, поэтому я делаю это просто ради экспериментов и любопытства. Вот мой код, я был бы очень признателен, если бы вы могли попытаться мне помочь.

 from selenium import webdriver
import time
from selenium.webdriver.chrome.options import Options
from selenium.common.exceptions import TimeoutException
import os
import random

webs = input("Complete Post URL: ")
username = os.getenv("USERNAME")
userProfile = "C:\Users\"   username   "\AppData\Local\Google\Chrome\User Data\Default"
chrome_options = Options()

chrome_options.add_argument("--disable-notifications")
chrome_options.add_argument("--disable-extensions")

chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--disable-javascript")
chrome_options.add_argument("--disable-rtc-smoothness-algorithm")
chrome_options.add_argument("--disable-webrtc-encryption")
chrome_options.add_argument("--disable-webrtc-hw-decoding")
chrome_options.add_argument("--incognito")
chrome_options.add_argument(
    '--user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
    'Chrome/86.0.4240.75 Safari/537.36"')
chrome_options.add_experimental_option("excludeSwitches",
                                       ["ignore-certificate-errors", "safebrowsing-disable-download-protection",
                                        "safebrowsing-disable-auto-update", "disable-client-side-phishing-detection",
                                        "enable-automation"])

x = str(random.randint(700, 1920))
y = str(random.randint(700, 1080))
chrome_options.add_argument(f"--window-size={x,y}")
driver = webdriver.Chrome('chromedriver.exe', options=chrome_options)

driver.get("https://old.reddit.com")
user = driver.find_element_by_xpath('//*[@id="login_login-main"]/input[2]')
user.send_keys(useritem)
pwd = driver.find_element_by_xpath('//*[@id="login_login-main"]/input[3]')
pwd.send_keys(passitem)
login = driver.find_element_by_xpath('//*[@id="login_login-main"]/div[4]/button')
login.click()
time.sleep(3.45)
driver.get(webs)
xp = webs.split('/')
xp = xp[-3]

try:
    time.sleep(5)
    upvote = driver.find_element_by_xpath(f'//*[@id="upvote-button-t3_{xp}"]/span/i')
    upvote.click()
    print(useritem   " Upvoted!")
    time.sleep(15)
    driver.close()
except TimeoutException as t:
    print(t.msg)
  

Комментарии:

1. В чем ошибка? — что-нибудь происходит? Вы пробовали отлаживать его, чтобы посмотреть, что произойдет? — Я вижу, что вы используете много тегов, вы уверены, что хотите их все … а именно, отключить javascript? (Это может быть то, как голосование передается на сервер)

2. @RichEdwards Ошибки нет, он просто не обновляет оценку post. Он голосует так, как это сделал бы обычный человек, но, похоже, он так не работает

3. Попробуйте удалить эту строку chrome_options.add_argument("--disable-javascript") и запустить снова.

4. @Naveen сделано, похоже, это ни на что не влияет

5. Возможно, это проблема xpath. Можете ли вы попробовать с upwork xpath, например (//div[@data-author]//*[@data-event-action="upvote"])[1]