I am trying to run this basic python selenium script but I kept getting the element not interactable error.
I tried switching from By.Name to By.ID and even By.XPATH just to see if it was because the chromedriver cant recognise the NAME but neither works
import time
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from webdriver_manager.chrome import ChromeDriverManager
# set up chromedriver
service = ChromeService(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service)
try:
driver.get('https://www.google.com/')
search_bar = driver.find_element(By.NAME, 'q')
search_bar.send_keys("cats")
button = driver.find_element(By.NAME, 'btnK')
driver.implicitly_wait(2)
button.click()
# Click on the search bar to focus it
ActionChains(driver).click(search_bar).perform()
search_bar.send_keys(Keys.RETURN)
time.sleep(5)
except Exception as e:
print(f"an error occured: {e}")
finally:
driver.quit()
I tried a delay just to give the website time to load as well as a focus on the button. H
/usr/local/bin/python3.10 /Users/someone/Desktop/sel_tut/locating_elems.py
an error occured: Message: element not interactable
(Session info: chrome=117.0.5938.88)
Stacktrace:
0 chromedriver 0x0000000104bbed58 chromedriver + 4336984
1 chromedriver 0x0000000104bb6dd4 chromedriver + 4304340
2 chromedriver 0x00000001047e38b4 chromedriver + 293044
3 chromedriver 0x0000000104823078 chromedriver + 553080
4 chromedriver 0x0000000104821a94 chromedriver + 547476
5 chromedriver 0x000000010481e200 chromedriver + 532992
6 chromedriver 0x0000000104863908 chromedriver + 817416
7 chromedriver 0x000000010481ca5c chromedriver + 526940
8 chromedriver 0x000000010481d908 chromedriver + 530696
9 chromedriver 0x0000000104b84da4 chromedriver + 4099492
10 chromedriver 0x0000000104b89260 chromedriver + 4117088
11 chromedriver 0x0000000104b8f4ec chromedriver + 4142316
12 chromedriver 0x0000000104b89d60 chromedriver + 4119904
13 chromedriver 0x0000000104b61a34 chromedriver + 3955252
14 chromedriver 0x0000000104ba6a08 chromedriver + 4237832
15 chromedriver 0x0000000104ba6b84 chromedriver + 4238212
16 chromedriver 0x0000000104bb6a4c chromedriver + 4303436
17 libsystem_pthread.dylib 0x0000000193c1bfa8 _pthread_start + 148
18 libsystem_pthread.dylib 0x0000000193c16da0 thread_start + 8
I tried testing out advice from similar issue here in stackoverflow so far none works. Thank you so much in advance for those who response!
Google will by default hide the search bar and buttons and show a "Before you continue to Google" pop-up, that is the reason why you can't access some dom elements. here is a quick fix :
import time
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from webdriver_manager.chrome import ChromeDriverManager
# set up chromedriver
service = ChromeService(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service)
try:
driver.get('https://www.google.com/')
# accept eula
accept_button = driver.find_element(By.ID, 'L2AGLb')
accept_button.click()
search_bar = driver.find_element(By.NAME, 'q')
search_bar.send_keys("cats")
button = driver.find_element(By.NAME, 'btnK')
driver.implicitly_wait(2)
button.click()
# requery for search bar since page changed
search_bar = driver.find_element(By.NAME, 'q')
# Click on the search bar to focus it
search_bar.click()
search_bar.send_keys(Keys.RETURN)
time.sleep(5)
except Exception as e:
print(f"an error occured: {e}")
finally:
driver.quit()