The element that I'm trying to select is the one below
<div id="mOnlineEligiblity" style="">
<a href="onlineElig.html" style="text-decoration: none !important;color: #275883;"><img src="../../images/mobileHome/Newicon/OnlineEligibility.png" height="65px" width="65px" >
<br> Online Eligibility </a>
</div>
I tried the following to select it, but it says element not found
driver.find_element_by_id("mOnlineEligiblity")
NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[id="mOnlineEligiblity"]"}
I want to be able to select and click on it
EDIT: -
It is present inside an iframe
like Swaroop mentioned, attaching the image for reference
CodePudding user response:
Had to switch to the iframe
like Swaroop mentioned.
# Find the iframe
iframe = driver.find_element_by_xpath("//iframe[@name='NAME_OF_THE_FRAME']")
# Switch to the iframe
driver.switch_to.frame(iframe)
# Now find the element
driver.find_element_by_id("mOnlineEligiblity").click()
CodePudding user response:
As long as it is indeed on the page that you are loading (isn't in an iframe), then you shouldn't have any issue locating it and clicking on it.
import platform
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
from selenium.webdriver.firefox.options import Options
options = webdriver.ChromeOptions()
if platform == "linux" or platform == "linux2":
driver = webdriver.Chrome(executable_path='chromedriver_linux', chrome_options=options)
elif platform == "darwin":
driver = webdriver.Chrome(executable_path='chromedriver_mac', chrome_options=options)
else:
driver = webdriver.Firefox()
driver.maximize_window()
timeout = 10
driver.get("file:///G:/Downloads/random.html")
xpath = '//*[@id="mOnlineEligiblity"]/a'
WebDriverWait(driver, timeout).until(EC.element_to_be_clickable((By.XPATH, xpath)))
link_to_click = driver.find_element(By.XPATH, XPath)
link_to_click.click()
driver.quit()
I would still suggest targeting the element that you actually want to click on via the xpath = '//*[@id="mOnlineEligiblity"]/a'
instead of just xpath = '//*[@id="mOnlineEligiblity"]'
but that's more of a best practice than anything you need to worry about if it's a one-off script.