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

柔情痞子 提交于 2020-06-10 03:32:05

问题


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)

Any help will be appreciated.

By the way, this is the first program that uses Selenium I'm trying to run, is there any possibility that i need to change some settings or that i need to install something else?


回答1:


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()



回答2:


Verify whether the "id" is getting changed and generated dynamically by refreshing the page, if it is the case then use the below xPath to find the element:

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


来源:https://stackoverflow.com/questions/41131630/selenium-cant-find-element-by-name-or-id-python

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!