0

I'm trying to automate a login with a user and password on a website, which is this one :

https://www.esselunga.it/area-utenti/applicationCheck?appName=esselungaEcommerce&daru=https%3A%2F%2Fwww.esselungaacasa.it%3A443%2Fecommerce%2Fnav%2Fauth%2Fsupermercato%2Fhome.html%3F&loginType=light

I managed to insert the user and the password trough Selenium, but I can't click on the "Accedi" button, which is the Italian word for "Sign In".

HTML:

<div>
   <button value="Accedi" type="submit">Accedi</button>
</div>

I tried the following python code:

1st try:

WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[1]/div[2]/div[2]/div[1]/form[1]/div/button"))).click()

2nd try:

button = driver.find_element(by=By.CSS_SELECTOR, value="Accedi")

3rd try:

button = driver.find_element(by=By.LINK_TEXT, value="Accedi")
button.click()

But without success. Can you please help me with this personal project?

undetected Selenium
  • 183,867
  • 41
  • 278
  • 352

2 Answers2

0

You can try:

# Needed libs
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time

#Open the browser
driver = webdriver.Edge()
url = 'https://www.esselunga.it/area-utenti/applicationCheck?appName=esselungaEcommerce&daru=https%3A%2F%2Fwww.esselungaacasa.it%3A443%2Fecommerce%2Fnav%2Fauth%2Fsupermercato%2Fhome.html%3F&loginType=light'
driver.get(url)

user = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, f"gw_username")))
user.send_keys('User@gmai.com')
user = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, f"gw_password")))
user.send_keys('password')
login_button = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, f"//button[@value='Accedi']")))
login_button.click()
time.sleep(10)

But I see a big problem here...and the problem is that you have a captcha. With the hints I give you will solve the problem of clicking into the element, but in the moment you need to pass the captcha...that will be a different topic because captchas are created for avoiding bots (Selenium is a bot managing your browser).

For the problem with the captcha you can check this other answer: Captctha

I hope it helps!

Jaky Ruby
  • 1,409
  • 1
  • 7
  • 12
0

To click on Accedi first you have to click on the reCAPTCHA checkbox which is within an <iframe> so you have to:

  • Induce WebDriverWait for the desired frame to be available and switch to it.

  • Induce WebDriverWait for the reCAPTCHA element to be clickable.

  • Induce WebDriverWait for Accedi element to be clickable.

  • You can use the following locator strategies:

    • Using CSS_SELECTOR:

      driver.get('https://www.esselunga.it/area-utenti/applicationCheck?appName=esselungaEcommerce&daru=https%3A%2F%2Fwww.esselungaacasa.it%3A443%2Fecommerce%2Fnav%2Fauth%2Fsupermercato%2Fhome.html%3F&loginType=light')
      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a#accettaTuttiCookie"))).click()
      driver.find_element(By.CSS_SELECTOR, "input#gw_username").send_keys("LeonardoVarè@stackoverflow.com")
      driver.find_element(By.CSS_SELECTOR, "input#gw_password").send_keys("LeonardoVarè")
      WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe[title='reCAPTCHA']")))
      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "span#recaptcha-anchor"))).click()
      driver.switch_to.default_content()
      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button[value='Accedi']"))).click()
      
  • Note : You have to add the following imports :

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
undetected Selenium
  • 183,867
  • 41
  • 278
  • 352