【问题标题】:Selenium can't find element by name or id (python)Selenium 无法按名称或 id 找到元素(python)
【发布时间】:2016-12-13 22:26:44
【问题描述】:
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()

我使用上面的 python 代码来练习一些基本的 Selenium 操作。 我找不到任何元素,无论是按名称还是按 ID。无论我尝试什么,我总是得到同样的错误,这表明我正在寻找的元素不存在。 (想法是按下其中一个按钮,如果重要的话......)

这是网站的部分html代码:

<!-- 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(链接失效)

我们将不胜感激。

顺便说一句,这是我尝试运行的第一个使用 Selenium 的程序,是否有可能我需要更改某些设置或需要安装其他东西?

【问题讨论】:

  • 能否请您检查并更新损坏的链接?该页面可能已移至别处...

标签: python selenium selenium-webdriver


【解决方案1】:

您要查找的项目位于 iframe 中。您需要先将 webdriver 的上下文切换到框架。

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

【讨论】:

  • 我试过了,但它不起作用。我得到了同样的错误:“selenium.common.exceptions.NoSuchElementException:消息:没有这样的元素:无法找到元素:{“method”:“id”,“selector”:“f_2561406_1”}(会话信息:chrome = 54.0 .2840.99)" 顺便说一句,你说元素在 iframe 中是什么意思?
  • 我相信你正在寻找frame = driver.find_element_by_css_selector('[id*="IFwinEdit_forms_dr4r3_forms"]')@GalBar-nahum
  • @Guy 我也试过了。它具有相同的结果,仍然是相同的错误... :(
  • 查看 DOM,您可以看到元素位于单独的 iframe 元素内部。使用我在答案中提供的代码,它对我来说很好。您是否尝试过仅复制和粘贴我输入的内容?
【解决方案2】:

通过刷新页面来验证“id”是否正在发生变化并动态生成,如果是则使用下面的xPath查找元素:

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

【讨论】:

  • 它也不起作用。顺便说一句,当我在 google 的主页上运行代码(当然有一些更改)时,它确实找到了元素。
猜你喜欢
  • 2021-06-28
  • 1970-01-01
  • 1970-01-01
  • 2021-06-23
  • 1970-01-01
  • 2016-06-08
  • 2019-04-22
  • 2019-01-04
  • 2020-03-05
相关资源
最近更新 更多