I tried to search stock in google finance as below.
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
url='https://www.google.com/finance/'
driver.get(url)
input_element = driver.find_element(By.CLASS_NAME, 'Ax4B8.ZAGvjd')
input_element.send_keys('nvda stock')
input_element.send_keys(Keys.ENTER)
time.sleep(1) # Wait buffering after search
However, I got an error as below.
ElementNotInteractableException: Message: element not interactable
(Session info: chrome=136.0.7103.114)
Stacktrace:
GetHandleVerifier [0x00007FF7A6A9CF65+75717]
GetHandleVerifier [0x00007FF7A6A9CFC0+75808]
(No symbol) [0x00007FF7A6868DCC]
(No symbol) [0x00007FF7A68B8B24]
(No symbol) [0x00007FF7A68B688D]
(No symbol) [0x00007FF7A68E737A]
(No symbol) [0x00007FF7A68B1C46]
(No symbol) [0x00007FF7A68E7590]
(No symbol) [0x00007FF7A690F39C]
(No symbol) [0x00007FF7A68E7153]
(No symbol) [0x00007FF7A68B0421]
(No symbol) [0x00007FF7A68B11B3]
GetHandleVerifier [0x00007FF7A6D9D74D+3223469]
GetHandleVerifier [0x00007FF7A6D97CF2+3200338]
GetHandleVerifier [0x00007FF7A6DB5B23+3322755]
GetHandleVerifier [0x00007FF7A6AB6A3A+180890]
GetHandleVerifier [0x00007FF7A6ABE13F+211359]
GetHandleVerifier [0x00007FF7A6AA52B4+109332]
GetHandleVerifier [0x00007FF7A6AA5462+109762]
GetHandleVerifier [0x00007FF7A6A8BA79+4825]
BaseThreadInitThunk [0x00007FFDB897E8D7+23]
RtlUserThreadStart [0x00007FFDB91DC5DC+44]
How could I can solve it?
I tried even searching in Chatgpt.
However, it makes same error.
I searched F12 button with developer version.
You might notice that there are two such elements with the same class name, and the first one is Non-Interactable.
Point to the second one, and that solves your problem.
input_element = driver.find_elements(By.CLASS_NAME, 'Ax4B8.ZAGvjd')[1]
or using CSS Selector with wait
:
input_element = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, 'input[aria-label="Search for stocks, ETFs & more"]')))[1]
Here's the bare minimum code:
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
wait = WebDriverWait(driver, 10)
driver.get('https://www.google.com/finance/')
input_element = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, 'input[aria-label="Search for stocks, ETFs & more"]')))[1]
# input_element = driver.find_elements(By.CLASS_NAME, 'Ax4B8.ZAGvjd')[1]
input_element.send_keys('nvda stock')
time.sleep(1)
input_element.send_keys(Keys.ENTER)
time.sleep(2)
Here's a cleaner version of the code:
https://github.com/Help-the-community/Web_Scraping_with_Selenium/blob/main/google_com_finance.py
output:
https://github.com/Help-the-community/Web_Scraping_with_Selenium/blob/main/google_finance.gif