因为我还没有找到解决方案,所以从两个月前开始颠簸。我正在使用Firefox驱动程序来查找,然后单击名为“收件箱”的超链接,但是经过详尽的尝试,Selenium仍然找不到该元素。由于我确实无法找到Selenium webdriver无法找到该元素的原因,因此可以提供任何帮助。
在下面的HTML代码中,我认为可能有一个框架,但找不到。 如果有人可以确认以下代码中实际上没有iframe,将不胜感激! 我的time.sleep(40)脚本中也已经有一个,以便有足够的时间让网络驱动程序找到该元素。因此,我的想法不多了,但是我在想,也许#text元素(“&nbsp”)就在“ inbox”超链接元素之前,可能是因为隐藏了“ inbox”元素导致了问题?有关如何进行的任何提示将不胜感激;下面列出了我所有的解决方案。
time.sleep(40)
下面是我的代码,直到出现此元素问题为止(由于专有,URL已被删除):
from selenium import webdriver import time driver = webdriver.Firefox() driver.get("[URL REMOVED]") time.sleep(2) elem1 = driver.find_element_by_css_selector('#main-content > div > div.col-md-4.radix-layouts-sidebar.sidebar-right.panel-panel.sidebar > div > div.panel-pane.pane-entity-field.pane-it-service-field-related-services.block > div > div > ul > li:nth-child(1) > a') elem1.click() #Logging in time.sleep(40) #Now in the System, click on Inbox Button elem2 = driver.find_element_by_??? # Trying to figure out this code to find inbox element elem2.click()
我尝试以下尝试找到元素:
find_element_by_xpath('//td[@class=’MENUCHOICE’]//a[@href="main.do?action=inbox"]') find_element_by_xpath('/html/body/table/tbody/tr[6]/td/a') find_element_by_link_text('Inbox') find_element_by_partial_link_text('Inb') find_element_by_css_selector('body > table > tbody > tr:nth-child(6) > td > a') find_element_by_css_selector("td.MENUCHOICE a[href='main.do?action=inbox']")
我尝试过的所有定位器都引发’selenium.common.exceptions.NoSuchElementException:消息:没有这样的元素:无法找到元素’
我无法提供该页面的链接,因为它是专有的,但是在下面我提供了页面HTML,以防有人可以提供帮助(感兴趣的元素位于倒数第二个MENUCHOICE类:Inbox下):
<html> <!--702.15--> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta http-equiv="Cache-Control" content="no-cache"> <meta http-equiv="Expires" content="0"> <meta http-equiv="Pragma" content="no-cache"> <title>UDM - Notification System</title> <style type="text/css"> td.MENU1 { FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; FONT-SIZE: 18pt; FONT-WEIGHT: medium; color: navy; } td.MENU2 { FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; FONT-SIZE: 15pt; FONT-WEIGHT: medium; color: navy; } td.MENUCHOICE { FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; FONT-SIZE: 14pt; FONT-WEIGHT: medium; color: blue; } </style> </head> <body bgcolor="#ffffff" background="payadm/images/background.gif"> <table width="750" border="0"> <tbody> <tr> <td><img height="55" width="129" src="payadm/images/udm_cw100.gif"></td> </tr> <tr> <td> <img src="payadm/images/footerline.gif"></td> </tr> <tr> <td class="MENU1"> AN Main Menu</td> </tr> <tr> <td> </td> </tr> <tr> <td class="MENUCHOICE"> Notification Functions:</td> </tr> <tr> <td class="MENUCHOICE"> <a href="main.do?action=inbox">Inbox</a> </td> </tr> <tr> <td class="MENUCHOICE"> <a href="main.do?action=notificationSel">Notification Selection</a> </td> </tr>
谢谢您的帮助。
这个问题已在一个月前解决。事实证明,对于这个特定的Web应用程序,Selenium webdriver需要从一开始就直接建立链接。否则,它不会“识别”它所在的页面。该Web应用程序通常不直接链接;您通常会浏览一个包含链接的中间页面。
我通过直接将Selenium定向到Web应用程序来解决此问题,而不是先通过中介页面并单击Web应用程序链接。即:
from selenium import webdriver import time driver = webdriver.Firefox() driver.get("[DIRECT LINK INSTEAD OF INTERMEDIARY PAGE LINK]")
希望这对以后遇到类似问题的人有所帮助。