Mes échecs d'automatisations

Transcript de la vidéo

Support du module

Automatiser 1.fr  (API inexistante)

Objectifs :

  1. Trigger l’automatisation python depuis make
  2. Run l’automatisation python sur un serveur
    1. Stocker les data scrappés
  3. Que l’automatisation python trigger la suite de mon process make
    1. Et envoie les data scrappé a make (google sheet api ou autre…)

Code test :

Pour automatiser l'optimisation des mots clés dans un texte avec 1.fr (bloqué par les captcha Cloudflare, même en chrome headless avec un proxy)

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains
import time

# Configuration du WebDriver
driver = webdriver.Chrome()  # Assurez-vous que le chemin du ChromeDriver est correct ou qu'il est dans votre PATH

try:
    # Ouvrir la première page Notion et récupérer le texte
    driver.get("https://essor.notion.site/test-704c45beccd94b609c565a045727f1a2")
    WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, "div[data-block-id] h1")))
    text_element = driver.find_element(By.CSS_SELECTOR, "div[data-block-id] h1")
    keyword = text_element.text

    # Ouvrir la deuxième page Notion et récupérer le texte
    driver.get("https://essor.notion.site/LOGICIEL-OMNISEO-363e0666e7804823904d64f367f35acb")
    WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, "div[data-block-id] span")))
    second_text_element = driver.find_element(By.CSS_SELECTOR, "div[data-block-id] span")
    second_keyword = second_text_element.text

    # Se connecter à 1.fr et remplir le champ avec le texte récupéré
    driver.get("https://1.fr/signin")
    WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.NAME, "user[email]")))
    driver.find_element(By.NAME, "user[email]").send_keys("XXXXXXXXXXXXXXX")
    driver.find_element(By.NAME, "user[password]").send_keys("XXXXXXXXXXXXXXX")
    driver.find_element(By.CSS_SELECTOR, "input[type='submit']").click()

    # Navigation et actions sur 1.fr
    WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//a[contains(@href, 'engine=google')]"))).click()
    WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//a[contains(@href, 'existing_text=1')]"))).click()
    WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.NAME, "query"))).send_keys(keyword)
    driver.find_element(By.NAME, "query").submit()

    WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a[href*='import_text_by_paste']"))).click()
    WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "request_text"))).send_keys(second_keyword)
    WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//strong[contains(text(), \"Démarrer l'optimisation\")]"))).click()

    # Attendre la fin de l'optimisation et copier le texte de la page
    WebDriverWait(driver, 30).until(EC.presence_of_element_located((By.TAG_NAME, "body")))
    page_text = driver.find_element(By.TAG_NAME, "body").text

    # Ouvrir Google Docs
    driver.get("https://docs.google.com/document/d/1MBmGG4OrLXO-Bp5e83fLsRbEGXzE8JojOUi3EYdkPBU/edit?usp=sharing")
    WebDriverWait(driver, 30).until(EC.visibility_of_element_located((By.CSS_SELECTOR, 'body')))
    body = driver.find_element(By.CSS_SELECTOR, 'body')
    action = ActionChains(driver)
    
    # Descendre jusqu'en bas de la page pour être sûr que tout le contenu est chargé
    for _ in range(500):
        action.send_keys(Keys.COMMAND + Keys.ARROW_DOWN).perform()
        time.sleep(0.1)

    # Sélectionner tout et supprimer
    action.click(body).key_down(Keys.COMMAND).send_keys('a').key_up(Keys.COMMAND).perform()
    for _ in range(1000):  # Spammer la touche BACKSPACE pour supprimer le contenu
        action.send_keys(Keys.BACKSPACE).perform()
        time.sleep(0.01)  # Petite pause pour simuler un rythme humain

    # Saisir le texte récupéré
    action.send_keys(page_text).perform()

    print("Texte copié dans Google Docs.")

except Exception as e:
    print("Une erreur est survenue :", str(e))

finally:
    # Fermer le navigateur après l'opération
    driver.quit()