'Buttons click with selenium webdriver not work/not found

Actually, i have a script with python 3.10, selenium, undetected-chromedriver and i want to click on two buttons on this webpage:

https://keepa.com/#!

Buttons are french flag, and ".fr" here:

enter image description here

And html code for these two buttons are here:

-first highlighted is flag fr

-second is country ".fr"

enter image description here

I've tested somes part of script, but not work actually:

For language flag fr:

driver.find_element(By.XPATH, "(//span[@id='lang_fr'])").click()
driver.find_element(By.ID,"lang_fr").click()

For country .fr:

driver.find_element(By.XPATH, "(//span[@setting='4'])").click()
driver.find_element(By.XPATH, "(.//span[contains(text(), '.fr')])").click()

I have somes errors on results, "element not found", or this:

selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable

Anyone can help me or have an idea where is the problem please?

Thanks for help, bye!



Solution 1:[1]

You have to click on default flag first and then there will be 2 button which you can click like below:

Code:

driver_path = r'C:\\Users\\****\\***\\Desktop\\Automation\\chromedriver.exe'

driver = webdriver.Chrome(driver_path)

driver.maximize_window()


driver.get("https://keepa.com/#!")
wait = WebDriverWait(driver, 30)

wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div#currentLanguage .languageMenuText"))).click()

flag = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "img#lang_fr")))
flag.click()

lang = wait.until(EC.visibility_of_element_located((By.XPATH, "//span[text()='.fr']")))
lang.click()

Imports:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

Solution 2:[2]

You can try the below code it will help you (this is using java though, ).

Actions actions = new Actions(driver);
WebElement ctr;
ctr= driver.findElement(By.xpath("//*[contains(text(),'YOUR DESIRED TEXT')]"));
Thread.sleep(1000);
actions.click(spatial).perform();

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 cruisepandey
Solution 2 Sanju