Home > database >  How to select the following element using selenium in python
How to select the following element using selenium in python

Time:03-30

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

enter image description here

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.

  • Related