Retwittear Tweet usando Selenium en Python

Requisitos previos:

En este artículo, veremos cómo retuitear un hashtag en particular y decidir si se mostrará en la sección de tendencias de Twitter o no. Podemos automatizar una cuenta en Twitter para que retuitee todos los tuits relacionados con cualquier hashtag en particular. Esto se puede lograr usando Selenium en Python.

Nota: Puede descargar el controlador web desde aquí .

Implementación paso a paso:

Paso 1: Importe los módulos requeridos

Python3

from selenium import webdriver
from selenium.webdriver.support.ui import Select
from selenium.webdriver.support.ui import WebDriverWait
import time
from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import ElementClickInterceptedException
from selenium.common.exceptions import StaleElementReferenceException
from selenium.webdriver.common.keys import Keys
from selenium.webdriver import ActionChains
import getpass

Paso 2 Ejecute webdriver y asígnelo a un controlador variable.

Python3

driver = webdriver.Chrome(executable_path='/usr/lib/chromium-browser/chromedriver')

Paso 3: Diríjase a la URL requerida y maximice la ventana usando maximizar_ventana .

Python3

driver.get('https://twitter.com/login')
driver.maximize_window()

Paso 4: Solicite al usuario las credenciales de la cuenta de Twitter y envíelas al cuadro de ingreso de nombre de usuario y contraseña ubicándolos a través de sus rutas. Use getpass para ingresar contraseñas para mayor seguridad. Puede insertar las credenciales en las ubicaciones requeridas send_keys() .

Python3

username = input('Enter Your Username: ')
password = getpass.getpass(prompt = 'Enter Your Password: ')
 
# locating the input box for username
u = driver.find_element_by_xpath('//*[@id="react-root"]/div/div/div[2]\
/main/div/div/div[2]/form/div/div[1]/label/div/div[2]/div/input')
u.send_keys(''+str(username)+'')
 
# locating the input box for password
p = driver.find_element_by_xpath('//*[@id="react-root"]/div/div/div[2]/\
main/div/div/div[2]/form/div/div[2]/label/div/div[2]/div/input')
p.send_keys(''+str(password)+'')

Paso 5: Ubique el botón de inicio de sesión a través de XPath y haga clic en él click() . Además, espere a que se cargue la página web utilizando los mismos métodos utilizados anteriormente.

Python3

driver.find_element_by_xpath('//*[@id="react-root"]/div/div/div[2]\
/main/div/div/div[2]/form/div/div[3]/div').click()
time.sleep(10)

Paso 6. Pídale al usuario que retuitee el hashtag e insértelo en el cuadro de búsqueda usando xpath y send_keys() como se hizo anteriormente.

Python3

srch = driver.find_element_by_xpath('//*[@id="react-root"]/div/div/div[2]\
/main/div/div/div/div[2]/div/div[2]/div/div/div/div[1]/div/div/div\
/form/div[1]/div/label/div[2]/div/input')
 
s = input('Enter the Hashtag you want to retweet: ')
srch.send_keys('#'+str(s)+'')
srch.send_keys(Keys.ENTER)

Paso 7: Pregunta por el número máximo de retweets que el usuario quiere hacer y dirígelo a la sección de últimos tweets usando xpath. Además, espere a que se cargue la página web usando time.sleep().

Python3

c = int(input('Max no. of Retweets: '))
driver.implicitly_wait(5)
driver.find_element_by_xpath('//*[@id="react-root"]/div/div/div[2]\
/main/div/div/div/div[1]/div/div[1]/div[2]/nav/div/div[2]/div/div[2]/a').click()
time.sleep(10)

Paso 8: inicia un bucle while que se interrumpe cuando se alcanza el número máximo de retweets. Dentro del ciclo, ubica todos los botones de retweet (usando los métodos anteriores) y haz clic en ellos uno por uno. 

Python3

while(1):
   
      # waiting for the webpage to load
    time.sleep(5)
    rt=driver.find_elements_by_css_selector('.css-18t94o4[data-testid ="retweet"]')
    for r in rt:
        try:
            r.click()
            time.sleep(2)
            driver.find_element_by_xpath('//*[@id="layers"]\
            /div[2]/div/div/div/div[2]/div[3]/div/div/div/div').click()
             
            c -= 1
            time.sleep(2)
            if(c == 0):
                break
        except (ElementClickInterceptedException, StaleElementReferenceException):
            pass
    driver.execute_script("window.scrollTo(0,document.body.scrollHeight)")
    if(c == 0):
        break

A continuación se muestra la implementación completa:

Python3

from selenium import webdriver
from selenium.webdriver.support.ui import Select
from selenium.webdriver.support.ui import WebDriverWait
import time
from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import ElementClickInterceptedException
from selenium.common.exceptions import StaleElementReferenceException
from selenium.webdriver.common.keys import Keys
from selenium.webdriver import ActionChains
import getpass
 
# initializing the driver
driver = webdriver.Chrome(
  executable_path='/usr/lib/chromium-browser/chromedriver')
 
# directing to the twitter login page
driver.get('https://twitter.com/login')
driver.maximize_window()
 
# asking the user for username and pas
username = input('Enter Your Username: ')
password = getpass.getpass(prompt='Enter Your Password: ')
 
# locating the input box for username
u = driver.find_element_by_xpath('//*[@id="react-root"]\
/div/div/div[2]/main/div/div/div[2]/form/div/div[1]\
/label/div/div[2]/div/input')
 
# inputing the username
u.send_keys(''+str(username)+'')
 
# locating the input box for password
p = driver.find_element_by_xpath('//*[@id="react-root"]\
/div/div/div[2]/main/div/div/div[2]/form/div/div[2]\
/label/div/div[2]/div/input')
 
# inputing the password
p.send_keys(''+str(password)+'')
print("loading... \n")
time.sleep(3)
 
# logging in
driver.find_element_by_xpath('//*[@id="react-root"]\
/div/div/div[2]/main/div/div/div[2]/form/div/div[3]/div').click()
time.sleep(10)
 
# Locating the search box
srch=driver.find_element_by_xpath('//*[@id="react-root"]\
/div/div/div[2]/main/div/div/div/div[2]/div/div[2]\
/div/div/div/div[1]/div/div/div/form/div[1]\
/div/label/div[2]/div/input')
 
# inputing the hashtag to retweet
s = input('Enter the Hashtag you want to retweet: ')
 
# inputing the hashtag
srch.send_keys('#'+str(s)+'')
 
# searching for the hashtag
srch.send_keys(Keys.ENTER)
 
# inputing maximum number of tweets one wants to retweet
c=int(input('Max no. of Retweets: '))
driver.implicitly_wait(5)
 
# directing the most latest tweets
driver.find_element_by_xpath('//*[@id="react-root"]/div/\
div/div[2]/main/div/div/div/div[1]/div/div[1]/div[2]/\
nav/div/div[2]/div/div[2]/a').click()
time.sleep(10)
 
 
while(1):
    time.sleep(5)
     
    # locating the retweet option in the webpage
    rt = driver.find_elements_by_css_selector(
      '.css-18t94o4[data-testid ="retweet"]')
    for r in rt:
        try:
               
            # retweeting
            r.click()
            time.sleep(2)
             
            # toggling the confirmation to retweet
            driver.find_element_by_xpath('//*[@id="layers"]/div[2]\
            /div/div/div/div[2]/div[3]/div/div/div/div').click()
            c -= 1
            time.sleep(2)
            if(c==0):
                break # breaking from the retweet loop
        except (ElementClickInterceptedException, StaleElementReferenceException):
            pass
           
     # scrolling to the bottom of the page
    driver.execute_script("window.scrollTo(0,document.body.scrollHeight)")
     
     # max number of retweets are achieved
    if(c==0):
        break # breaking from the retweet loop
driver.close()

Producción:

Publicación traducida automáticamente

Artículo escrito por adityamutharia y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *