Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x Selenium:无法定位元素_Python 3.x_Selenium - Fatal编程技术网

Python 3.x Selenium:无法定位元素

Python 3.x Selenium:无法定位元素,python-3.x,selenium,Python 3.x,Selenium,所以我试图识别这个按钮来按下它,但我得到了一个例外: selenium.common.exceptions.NoSuchElementException:消息:没有这样的元素:无法找到元素 下图显示了该按钮: 奇怪的是,我已经在登录页面中识别了登录按钮,但是在我进入下一个页面之后,识别一个元素就不可能了,这可能是因为页面不允许这样做吗 #This one works driver.find_element_by_class_name("urBtnStdNew").click() #This o

所以我试图识别这个按钮来按下它,但我得到了一个例外:

selenium.common.exceptions.NoSuchElementException:消息:没有这样的元素:无法找到元素

下图显示了该按钮:

奇怪的是,我已经在登录页面中识别了登录按钮,但是在我进入下一个页面之后,识别一个元素就不可能了,这可能是因为页面不允许这样做吗

#This one works
driver.find_element_by_class_name("urBtnStdNew").click()
#This one give the exception
driver.find_element_by_id("sapbi_snippet_TABSTRIP_CONTAINER_ITEM_1").click()
#This is the HTML of that element
<span class="urTbsTxtOff">DPD Trend</span></td>

使用
WebDriverWait
并遵循
xpath
单击
DPD趋势
选项卡

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//td[@class='urTbsLabelOff urBorderBox']/span[@class='urTbsTxtOff'][contains(.,'DPD Trend')]"))).click()

使用
WebDriverWait
并遵循
xpath
单击
DPD趋势
选项卡

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//td[@class='urTbsLabelOff urBorderBox']/span[@class='urTbsTxtOff'][contains(.,'DPD Trend')]"))).click()
哈姆扎,
WebDriverWait
将无法工作。正如您所说的,您已经尝试使用Thread.sleep()和WebDriver仍然找不到该元素

在我看来,问题似乎是由于使用了不正确的元素定位器

如果屏幕截图中的按钮是红色框中的按钮,并且元素检查器中红色框中的代码与之相关,那么在我看来,ID应该是
TABSTRIP\u CONTAINER\u ITEM\u 1\u TABSTRIP\u TABSTRIP-itm-5
。 因此,根据上面的示例,以下代码应该找到DPD趋势按钮并单击它:

driver.find_element_by_id("TABSTRIP_CONTAINER_ITEM_1_tabStrip_tabstrip-itm-5").click()
哈姆扎,
WebDriverWait
将无法工作。正如您所说的,您已经尝试使用Thread.sleep()和WebDriver仍然找不到该元素

在我看来,问题似乎是由于使用了不正确的元素定位器

如果屏幕截图中的按钮是红色框中的按钮,并且元素检查器中红色框中的代码与之相关,那么在我看来,ID应该是
TABSTRIP\u CONTAINER\u ITEM\u 1\u TABSTRIP\u TABSTRIP-itm-5
。 因此,根据上面的示例,以下代码应该找到DPD趋势按钮并单击它:

driver.find_element_by_id("TABSTRIP_CONTAINER_ITEM_1_tabStrip_tabstrip-itm-5").click()

正确的XPath定位器将非常简单:

//span[text()='DPD Trend']
如果仍无法找到该图元,请执行以下操作:

  • 再次检查它是否在,如果是-您需要在找到之前
  • 再次检查它是否未隐藏在中,如果是,则需要定位通孔并将结果强制转换为

  • 一个很好的做法是使用查找元素,因为在DOM中可能无法立即使用这些元素,请查看文章以了解更多详细信息


正确的XPath定位器应该非常简单:

//span[text()='DPD Trend']
如果仍无法找到该图元,请执行以下操作:

  • 再次检查它是否在,如果是-您需要在找到之前
  • 再次检查它是否未隐藏在中,如果是,则需要定位通孔并将结果强制转换为

  • 一个很好的做法是使用查找元素,因为在DOM中可能无法立即使用这些元素,请查看文章以了解更多详细信息


PS:这不是加载时间的问题,因为我尝试了time.sleep(),直到页面完全加载,但它无法正常工作。它是否在iframe中?如果是这样的话,在尝试查找元素之前,您需要切换到正确的iframe。@我完全是初学者,什么是iframe?我该怎么查?感谢you@Ardesco谢谢,这确实是一个iframe,我必须切换,我对itPS知之甚少:这不是加载时间的问题,因为我尝试了time.sleep()直到页面完全加载,但它不能正常工作。它在iframe中吗?如果是这样的话,在尝试查找元素之前,您需要切换到正确的iframe。@我完全是初学者,什么是iframe?我该怎么查?感谢you@Ardesco谢谢你,这确实是一个我不得不切换的iframe,我对它知之甚少谢谢你的评论,我尝试了所有的定位器和所有的值,但它总是给出(没有这样的元素),页面是SAP BEx网页,所以我不知道它是否对自动化测试免疫…这真是一个奇怪的按钮,你甚至不能“右键单击”和“在新选项卡中打开“它可以公开访问吗?看起来很奇怪,你不能右击它!也许可以尝试右键单击它周围的区域,然后在元素检查器中将鼠标移动到代码的不同部分,以查看按钮是否高亮显示。通常在我无法访问某个元素时对我有效。。。。否则,您可以创建所有选项卡的列表(可能通过标记名找到它们),然后执行if语句查看每个选项卡的文本,并在显示您搜索的文本时单击该选项卡。感谢您的评论,我尝试了所有定位器和所有值,但它总是给出(没有这样的元素),该页面是一个SAP BEx网页,所以我不知道它是否对自动化测试免疫…它真的是一个奇怪的按钮,你甚至不能“右键单击”和“在新选项卡中打开”它可以公开访问吗?看起来很奇怪,你不能右击它!也许可以尝试右键单击它周围的区域,然后在元素检查器中将鼠标移动到代码的不同部分,以查看按钮是否高亮显示。通常在我无法访问某个元素时对我有效。。。。否则,您可以创建所有选项卡的列表(可能通过标记名找到它们),然后执行if语句查看每个选项卡的文本,并在显示您要搜索的文本时单击该选项卡。我尝试过,但得到了selenium.common.exceptions.TimeoutException我认为这与需要时间加载的页面无关,但我觉得它就是找不到元素。你认为呢?是的,你是对的。但是根据快照给出答案很困难。我尝试过,但得到了selenium.common.exceptions.TimeoutException我认为这与页面需要时间加载无关,但我认为它就是找不到元素。你认为呢?是的,你是对的。但是根据快照很难给出答案。