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()