因为我没有找到解决方案,所以从两个月前就把这个弄得一团糟。我正在使用Firefox驱动程序查找,然后单击名为“收件箱”的超链接但经过详尽的尝试后,Selenium仍无法找到该元素。任何帮助将不胜感激,因为我真的无法找到Selenium webdriver无法找到该元素的原因。
在下面的HTML代码中,我认为可能有一个框架但没有找到;如果有人可以确认在下面的代码中确实没有iframe,那将是值得赞赏的!我的脚本中已经有一个time.sleep(40)
,以便有足够的时间让webdriver找到元素。所以我的想法已经不多了,但是想到可能在“收件箱”超链接元素之前的#text元素(“&nbsp”)可能会通过隐藏“收件箱”元素导致问题?任何关于如何进行的提示将不胜感激;我所有的解决方案都列在下面。
下面是我的代码,直到出现此元素问题(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类:收件箱):
<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>
谢谢您的帮助。
要单击带有文本为收件箱的元素,您可以使用以下任一解决方案:
css_selector
:
find_element_by_css_selector("td.MENUCHOICE a[href='main.do?action=inbox']")
xpath
:
find_element_by_xpath("//td[@class='MENUCHOICE']//a[@href='main.do?action=inbox' and contains(.,'Inbox')]")
这个问题在一个月前得到了解决。事实证明,对于这个特定的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]")
希望这有助于将来遇到类似问题的任何人。