NoSuchElementException: Message: Unable to locate element while trying to click on the button VISA through Selenium and Python(NoSuchElementException:消息:尝试通过 Selenium 和 Python 单击 VISA 按钮时无法找到元素)
问题描述
我无法单击此按钮在我的机器人上创建结帐.我想点击图片获取另一个页面.
I can't click on this button to create a checkout on my bot. I want to click the image to get another page.
<label for="VISA" class="choiceLabel">
<input type="radio" class="visuallyhidden" name="cardTypeRadio" id="VISA" value="VISA" title="VklTQQ==" onclick="validateAndSubmit('VISA');">
<span class="imgElt xh-highlight" onclick="validateAndSubmit('VISA');">
<img src="L3N0YXRpYy8yLjE1LjAuMS9pbWFnZXMvdHlwZS1jYXJ0ZS92aXNhLnBuZw==" alt="VklTQQ==" title="VmlzYQ==">
</span>
<span class="txtElt">Visa</span>
</label>
这是我的代码:
try:
check = WebDriverWait(driver, delay).until(EC.presence_of_element_located((By.ID,"VISA" )))
print ("Page is ready!")
visa = driver.find_elements_by_xpath("label[@class='choiceLabel'][4]")
visa.click()
except TimeoutException:
print ("Loading took too much time!")
return check
我收到此错误:
File "C:UsersxAppDataLocalProgramsPythonPython37lib hreading.py", line 917, in _bootstrap_inner
self.run()
File "C:UsersxAppDataLocalProgramsPythonPython37lib hreading.py", line 865, in run
self._target(*self._args, **self._kwargs)
File "c:/Users/pietro/Documents/monitor/x/bot.py", line 48, in all
visa = driver.find_element_by_xpath("label[@class='choiceLabel'][4]")
File "C:UsersxAppDataLocalProgramsPythonPython37libsite-packagesseleniumwebdriver
emotewebdriver.py", line 394, in find_element_by_xpath
return self.find_element(by=By.XPATH, value=xpath)
File "C:UsersxAppDataLocalProgramsPythonPython37libsite-packagesseleniumwebdriver
emotewebdriver.py", line 978, in find_element
'value': value})['value']
File "C:UsersxAppDataLocalProgramsPythonPython37libsite-packagesseleniumwebdriver
emotewebdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "C:UsersxAppDataLocalProgramsPythonPython37libsite-packagesseleniumwebdriver
emoteerrorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: label[@class='choiceLabel'][4]
推荐答案
在我的机器人上创建结帐的按钮 似乎是一个 信用卡 相关领域,并且在历史上信用卡相关字段位于<iframe>
中.
The button to create a checkout on my bot seems to be a Credit Card related field and historically Credit Card related fields resides within <iframe>
.
您可以在以下位置找到一些相关讨论:
You can find a couple of relevant discussions in:
- 无法定位使用 selenium python 的信用卡号元素
- org.openqa.selenium.NoSuchElementException:尝试通过 CssSelector 定位 card-fields-iframe 时返回的节点(null)不是 DOM 元素
因此,如果所需的元素在 <iframe>
内,那么您必须:
So if the the desired element is within an <iframe>
so you have to:
- 诱导 WebDriverWait 使所需的框架可用并切换到它.
- 诱导 WebDriverWait 使所需的元素可点击.
您可以使用以下任一解决方案:
- Induce WebDriverWait for the desired frame to be available and switch to it.
- Induce WebDriverWait for the desired element to be clickable.
You can use either of the following solutions:
使用
CSS_SELECTOR
:
WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe_css_selector")))
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "label[for='VISA']"))).click()
使用 XPATH
:
WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe_xpath")))
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//label[@for='VISA']"))).click()
注意:您必须添加以下导入:
Note : You have to add the following imports :
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
这篇关于NoSuchElementException:消息:尝试通过 Selenium 和 Python 单击 VISA 按钮时无法找到元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:NoSuchElementException:消息:尝试通过 Selenium 和 Pytho


- python check_output 失败,退出状态为 1,但 Popen 适用于相同的命令 2022-01-01
- 沿轴计算直方图 2022-01-01
- padding='same' 转换为 PyTorch padding=# 2022-01-01
- 如何将一个类的函数分成多个文件? 2022-01-01
- pytorch 中的自适应池是如何工作的? 2022-07-12
- 使用Heroku上托管的Selenium登录Instagram时,找不到元素';用户名'; 2022-01-01
- 如何在 Python 的元组列表中对每个元组中的第一个值求和? 2022-01-01
- 分析异常:路径不存在:dbfs:/databricks/python/lib/python3.7/site-packages/sampleFolder/data; 2022-01-01
- python-m http.server 443--使用SSL? 2022-01-01
- 如何在 python3 中将 OrderedDict 转换为常规字典 2022-01-01