0

The element that I'm trying to select is the one below

<div id="mOnlineEligiblity" class="col span_1_of_3" style="">
  <a href="onlineElig.html" style="text-decoration: none !important;color: #275883;"><img src="../../images/mobileHome/Newicon/OnlineEligibility.png" height="65px" width="65px" class="morph">
  <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

enter image description here

13
  • Do you know if it exists when you are running that bit of code? As a hacky test, sleep 5 seconds and then continue. Commented Mar 30, 2022 at 6:52
  • 1
    Might be your element is in the iframe. Switch to that iframe and then search. Commented Mar 30, 2022 at 6:52
  • 2
    Okay then switch to that iframe and then search for this element, you will definitely find it. Cheers..!! This Thread might help you. Commented Mar 30, 2022 at 7:39
  • 1
    @Cfomodz, and Swaroop thank you for the help, I was able to solve it :) Commented Mar 30, 2022 at 7:39
  • 1
    @dpacman Well done and glad you got it! Swaroop, nice intuition on what was going on - he had the answer for your first try ;) Commented Mar 30, 2022 at 7:54

2 Answers 2

1

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()
Sign up to request clarification or add additional context in comments.

Comments

1

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.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.