首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法找到Selenium和Python的复选框元素

无法找到Selenium和Python的复选框元素
EN

Stack Overflow用户
提问于 2016-09-21 16:48:02
回答 2查看 1K关注 0票数 0

这是仅复选框的HTML代码:

代码语言:javascript
复制
<table id="rmaAssetCosmeticComponents_ctl00_CheckBoxList_Comp_17_38788_24582_73_0_True" border="0">
			<tbody><tr>
				<td><input id="rmaAssetCosmeticComponents_ctl00_CheckBoxList_Comp_17_38788_24582_73_0_True_0" type="checkbox" name="rmaAssetCosmeticComponents$ctl00$CheckBoxList_Comp_17_38788_24582_73_0_True$0"><label for="rmaAssetCosmeticComponents_ctl00_CheckBoxList_Comp_17_38788_24582_73_0_True_0">Cracked Case</label></td><td><input id="rmaAssetCosmeticComponents_ctl00_CheckBoxList_Comp_17_38788_24582_73_0_True_1" type="checkbox" name="rmaAssetCosmeticComponents$ctl00$CheckBoxList_Comp_17_38788_24582_73_0_True$1"><label for="rmaAssetCosmeticComponents_ctl00_CheckBoxList_Comp_17_38788_24582_73_0_True_1">Cracked Case (Upper Half)</label></td>
			</tr><tr>
				<td><input id="rmaAssetCosmeticComponents_ctl00_CheckBoxList_Comp_17_38788_24582_73_0_True_2" type="checkbox" name="rmaAssetCosmeticComponents$ctl00$CheckBoxList_Comp_17_38788_24582_73_0_True$2"><label for="rmaAssetCosmeticComponents_ctl00_CheckBoxList_Comp_17_38788_24582_73_0_True_2">Cracked Face Plate</label></td><td><input id="rmaAssetCosmeticComponents_ctl00_CheckBoxList_Comp_17_38788_24582_73_0_True_3" type="checkbox" name="rmaAssetCosmeticComponents$ctl00$CheckBoxList_Comp_17_38788_24582_73_0_True$3"><label for="rmaAssetCosmeticComponents_ctl00_CheckBoxList_Comp_17_38788_24582_73_0_True_3">Deep Scratches</label></td>
			</tr><tr>
				<td><input id="rmaAssetCosmeticComponents_ctl00_CheckBoxList_Comp_17_38788_24582_73_0_True_4" type="checkbox" name="rmaAssetCosmeticComponents$ctl00$CheckBoxList_Comp_17_38788_24582_73_0_True$4"><label for="rmaAssetCosmeticComponents_ctl00_CheckBoxList_Comp_17_38788_24582_73_0_True_4">Discolored Case</label></td><td><input id="rmaAssetCosmeticComponents_ctl00_CheckBoxList_Comp_17_38788_24582_73_0_True_5" type="checkbox" name="rmaAssetCosmeticComponents$ctl00$CheckBoxList_Comp_17_38788_24582_73_0_True$5"><label for="rmaAssetCosmeticComponents_ctl00_CheckBoxList_Comp_17_38788_24582_73_0_True_5">Light Scratches In Case</label></td>
			</tr><tr>
				<td><input id="rmaAssetCosmeticComponents_ctl00_CheckBoxList_Comp_17_38788_24582_73_0_True_6" type="checkbox" name="rmaAssetCosmeticComponents$ctl00$CheckBoxList_Comp_17_38788_24582_73_0_True$6"><label for="rmaAssetCosmeticComponents_ctl00_CheckBoxList_Comp_17_38788_24582_73_0_True_6">Major Cracks</label></td><td><input id="rmaAssetCosmeticComponents_ctl00_CheckBoxList_Comp_17_38788_24582_73_0_True_7" type="checkbox" name="rmaAssetCosmeticComponents$ctl00$CheckBoxList_Comp_17_38788_24582_73_0_True$7"><label for="rmaAssetCosmeticComponents_ctl00_CheckBoxList_Comp_17_38788_24582_73_0_True_7">Major Scratches</label></td>
			</tr><tr>
				<td><input id="rmaAssetCosmeticComponents_ctl00_CheckBoxList_Comp_17_38788_24582_73_0_True_8" type="checkbox" name="rmaAssetCosmeticComponents$ctl00$CheckBoxList_Comp_17_38788_24582_73_0_True$8"><label for="rmaAssetCosmeticComponents_ctl00_CheckBoxList_Comp_17_38788_24582_73_0_True_8">Minor Cracks</label></td><td><input id="rmaAssetCosmeticComponents_ctl00_CheckBoxList_Comp_17_38788_24582_73_0_True_9" type="checkbox" name="rmaAssetCosmeticComponents$ctl00$CheckBoxList_Comp_17_38788_24582_73_0_True$9"><label for="rmaAssetCosmeticComponents_ctl00_CheckBoxList_Comp_17_38788_24582_73_0_True_9">Minor Scratches</label></td>
			</tr><tr>
				<td><input id="rmaAssetCosmeticComponents_ctl00_CheckBoxList_Comp_17_38788_24582_73_0_True_10" type="checkbox" name="rmaAssetCosmeticComponents$ctl00$CheckBoxList_Comp_17_38788_24582_73_0_True$10"><label for="rmaAssetCosmeticComponents_ctl00_CheckBoxList_Comp_17_38788_24582_73_0_True_10">Missing Port Cover</label></td><td><input id="rmaAssetCosmeticComponents_ctl00_CheckBoxList_Comp_17_38788_24582_73_0_True_11" type="checkbox" name="rmaAssetCosmeticComponents$ctl00$CheckBoxList_Comp_17_38788_24582_73_0_True$11"><label for="rmaAssetCosmeticComponents_ctl00_CheckBoxList_Comp_17_38788_24582_73_0_True_11">Missing Side Panel</label></td>
			</tr><tr>
				<td><input id="rmaAssetCosmeticComponents_ctl00_CheckBoxList_Comp_17_38788_24582_73_0_True_12" type="checkbox" name="rmaAssetCosmeticComponents$ctl00$CheckBoxList_Comp_17_38788_24582_73_0_True$12"><label for="rmaAssetCosmeticComponents_ctl00_CheckBoxList_Comp_17_38788_24582_73_0_True_12">No Back Cover</label></td><td><input id="rmaAssetCosmeticComponents_ctl00_CheckBoxList_Comp_17_38788_24582_73_0_True_13" type="checkbox" name="rmaAssetCosmeticComponents$ctl00$CheckBoxList_Comp_17_38788_24582_73_0_True$13"><label for="rmaAssetCosmeticComponents_ctl00_CheckBoxList_Comp_17_38788_24582_73_0_True_13">No Bay Cover</label></td>
			</tr><tr>
				<td><input id="rmaAssetCosmeticComponents_ctl00_CheckBoxList_Comp_17_38788_24582_73_0_True_14" type="checkbox" name="rmaAssetCosmeticComponents$ctl00$CheckBoxList_Comp_17_38788_24582_73_0_True$14"><label for="rmaAssetCosmeticComponents_ctl00_CheckBoxList_Comp_17_38788_24582_73_0_True_14">No Face Plate</label></td><td><input id="rmaAssetCosmeticComponents_ctl00_CheckBoxList_Comp_17_38788_24582_73_0_True_15" type="checkbox" name="rmaAssetCosmeticComponents$ctl00$CheckBoxList_Comp_17_38788_24582_73_0_True$15"><label for="rmaAssetCosmeticComponents_ctl00_CheckBoxList_Comp_17_38788_24582_73_0_True_15">Open Box</label></td>
			</tr><tr>
				<td><input id="rmaAssetCosmeticComponents_ctl00_CheckBoxList_Comp_17_38788_24582_73_0_True_16" type="checkbox" name="rmaAssetCosmeticComponents$ctl00$CheckBoxList_Comp_17_38788_24582_73_0_True$16"><label for="rmaAssetCosmeticComponents_ctl00_CheckBoxList_Comp_17_38788_24582_73_0_True_16">Open Box, Sealed Unit</label></td><td><input id="rmaAssetCosmeticComponents_ctl00_CheckBoxList_Comp_17_38788_24582_73_0_True_17" type="checkbox" name="rmaAssetCosmeticComponents$ctl00$CheckBoxList_Comp_17_38788_24582_73_0_True$17"><label for="rmaAssetCosmeticComponents_ctl00_CheckBoxList_Comp_17_38788_24582_73_0_True_17">Scratches In Screen</label></td>
			</tr><tr>
				<td><input id="rmaAssetCosmeticComponents_ctl00_CheckBoxList_Comp_17_38788_24582_73_0_True_18" type="checkbox" name="rmaAssetCosmeticComponents$ctl00$CheckBoxList_Comp_17_38788_24582_73_0_True$18"><label for="rmaAssetCosmeticComponents_ctl00_CheckBoxList_Comp_17_38788_24582_73_0_True_18">Sealed Box</label></td><td></td>
			</tr>
		</tbody></table>

大家好!这个问题很简单,同时也很复杂,在图片中是我要点击的目标,这是一个复选框,它无论如何都应该很容易找到目标,但由于某种原因,Python一直向我抛出这个错误(我以前遇到了这个错误,但现在我无法绕过它):

代码语言:javascript
复制
Traceback (most recent call last):
  File "C:\Users\AMSUser\AppData\Local\Programs\Python\Python35-32\Scripts\Add Asset.py", line 167, in <module>
    nobackcover = browser.find_element_by_xpath('//*[@id="rmaAssetCosmeticComponents_ctl00_CheckBoxList_Comp_17_38774_24566_73_0_True_12"]')
  File "C:\Users\AMSUser\AppData\Local\Programs\Python\Python35-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 293, in find_element_by_xpath
    return self.find_element(by=By.XPATH, value=xpath)
  File "C:\Users\AMSUser\AppData\Local\Programs\Python\Python35-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 752, in find_element
    'value': value})['value']
  File "C:\Users\AMSUser\AppData\Local\Programs\Python\Python35-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 236, in execute
    self.error_handler.check_response(response)
  File "C:\Users\AMSUser\AppData\Local\Programs\Python\Python35-32\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 192, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id="rmaAssetCosmeticComponents_ctl00_CheckBoxList_Comp_17_38774_24566_73_0_True_12"]"}
  (Session info: chrome=52.0.2743.116)
  (Driver info: chromedriver=2.23.409699 (49b0fa931cda1caad0ae15b7d1b68004acd05129),platform=Windows NT 10.0.14393 x86_64)

或变体,如果我使用名称或id目标复选框。

当我使用Chrome developer工具复制xpath元素时,我得到了以下内容:

代码语言:javascript
复制
"//*[@id="rmaAssetCosmeticComponents_ctl00_CheckBoxList_Comp_17_38760_24576_73_0_True_12"]".

这是我目前使用的代码:

代码语言:javascript
复制
#Here i open the checkbox menu that gives me the checkbox i need to click
Cosmeticselect = browser.find_element_by_xpath('//*[@id="rmaAssetCosmeticComponents_ctl00_btnAdd"]')
Cosmeticselect.click()
#2 seconds delay because it takes a second to load.
time.sleep(2)
#I have tried several iterations of this none give me the desire output, maybe this checkbox is in another iframe? if so i have yet to find it in the code.
nobackcover = browser.find_element_by_id('rmaAssetCosmeticComponents_ctl00_CheckBoxList_Comp_17_38776_24568_73_0_True_12')
#nobackcover = browser.find_element_by_xpath('//*[@id="rmaAssetCosmeticComponents_ctl00_CheckBoxList_Comp_17_38775_24567_73_0_True"]/tbody/tr[7]/td[1]/label')
#nobackcover = browser.find_element_by_name('rmaAssetCosmeticComponents$ctl00$CheckBoxList_Comp_17_38778_24570_73_0_True$12')
nobackcover.click()

我怀疑我必须切换到化妆品“窗口”,但我还没有找到关于iframe等的参考,我会继续研究,当我找到解决办法时,我会把它张贴出来,但如果有人想给这个问题增加一双新的眼睛,我会很感激的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-21 20:59:09

在使用html代码进行更新之前,您可以尝试以下这些:

css

input[id*='rmaAssetCosmeticComponents'][id*='True_12']

xpath's

//input[text()='No Back Cover']

//input[contains(@id, 'rmaAssetCosmeticComponents')][contains(@id, 'True_12')]

跳过id的最后一部分不改变时,可以根据未更改的ht属性部分创建选择器,也可以基于元素中包含的文本创建选择器。

票数 0
EN

Stack Overflow用户

发布于 2016-09-21 17:01:49

首先,确保您的路径(//[@id="rmaAssetCosmeticComponents_ctl00_CheckBoxList_Comp_17_38774_24566_73_0_True_12")可以使用Selenium IDE指向正确的元素。

第二,使用WebElement等待元素可单击或元素的存在。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39622242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档