Selenium can't find element by name or id (Python)

Question:

Consider:

from selenium import webdriver
import os
from selenium.webdriver import chrome

driver = webdriver.Chrome()
driver.get("http://nmcunited.me.showenter.com/%D7%9C%D7%94-%D7%9C%D7%94-%D7%9C%D7%A0%D7%93.html")
driver.implicitly_wait(15)
christmasTag = driver.find_element_by_id('f_2561406_1')
christsmasTag.click()
driver.close()

I used the Python code above in order to practice on some basic Selenium operations.

I couldn’t find any element, neither by name nor by id. No matter what I tried, I always got the same error, which stated that the element I’m looking for doesn’t exist (the idea was to press one of the buttons, if it matters…).

This is a part of the HTML code of the website:

<!-- Main page -->
<td
valign="top">
<table width="100%" cellspacing="0" cellpadding="0" border="0">
<!-- Page Content -->
<!-- Page Content -->
<tr>
<td valign="top">
<table border="0" width="100%" cellpadding="3" cellspacing="0">
<tr>
  <!-- The form -->
  <td valign="top">
  <form id="form2" name="form2" method="post" action="/site/form/sendForm.asp" OnSubmit="return CheckSubmit();" enctype="multipart/form-data">
  <!-- Form Field List -->
  <table id='sop_form_594602' class='sop_all_form' align="center" border="0" width="100%" cellpadding="3" cellspacing="0"
  >
  <tr>
  <td style="color:;" class="changeText14">
    <span style="font-weight:bold;">באיזה חג מפוטר ראין גוסלינג?</span><br>
    <input type="radio" name="f_2561406" id="f_2561406_0" value="1. חג הפסחא" class="rachbox" checked>
    <label for="f_2561406_0">1. חג הפסחא</label>
    <br>
    <input type="radio" name="f_2561406" id="f_2561406_1" value="2. חג המולד" class="rachbox">
    <label for="f_2561406_1">2. חג המולד</label>
    <br>
    <input type="radio" name="f_2561406" id="f_2561406_2" value="3. סליבסטר" class="rachbox">
    <label for="f_2561406_2">3. סליבסטר</label>
    <br>
    <input type="radio" name="f_2561406" id="f_2561406_3" value="4. חג ראש השנה" class="rachbox">
    <label for="f_2561406_3">4. חג ראש השנה</label>
    <br>
  </td>
</tr>

This is the said website (broken link)

By the way, this is the first program that uses Selenium I’m trying to run. Is there a possibility that I need to change some settings or that I need to install something else?

Asked By: Gal Bar-nahum

||

Answers:

The items you are trying to find are inside of an iframe. You need to switch the context of the webdriver to the frame first.

from selenium import webdriver
import os
from selenium.webdriver import chrome

driver = webdriver.Chrome()
driver.get("http://nmcunited.me.showenter.com/%D7%9C%D7%94-%D7%9C%D7%94-%D7%9C%D7%A0%D7%93.html")
driver.implicitly_wait(15)
frame = driver.find_element_by_css_selector('div.tool_forms iframe')
driver.switch_to.frame(frame)
christmasTag = driver.find_element_by_id('f_2561406_1')
christmasTag.click()
driver.close()
Answered By: Lucas Tierney

Verify whether the "id" is getting changed and generated dynamically by refreshing the page. If it is the case then use the below XPath expression to find the element:

"//input[@value='2. חג המולד']"
Answered By: SVS