我正在使用Selenium(Chrome)Webdriver( Python 3 )在名为“收件箱”的页面上找到一个按钮(然后单击它),但是我反复得到“ NoSuchElementException:消息:没有这样的元素:无法找到元素。”
这很可能是由于html中有许多不间断空格(&nbsp)(请参见下文)
<tr>
<td class="MENUCHOICE">
"
" == $0
<a href="main.do?action=inbox">Inbox</a>
</td>
我尝试了几种方法来解决不间断空间,但尚未找到解决方案:
1)driver.find_element_by_link_text(' Inbox')
(在链接文本之前添加五个空格)
2)driver.find_element_by_xpath("//a[.='\u00A0\u00A0\u00A0\u00A0\u00A0Inbox']")
对于使用Python代码查找元素的任何建议,我们将不胜感激。
更新:我应该提到的是,完整的HTML代码中没有iframe,并且我的代码中已经有一个time.sleep(40),以便有足够的时间使链接可点击。我只专注于不间断的空格,因为我已经尝试过查找不包含这些元素的元素。这是我尝试的一些示例(不考虑&nbsp):
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']")
答案 0 :(得分:2)
这些不间断的空格字符不是链接文本的一部分,因此您无需将其包括在锚定选择器中...试试
driver.find_element_by_link_text('Inbox') # or driver.find_element_by_link_text('INBOX')
或
driver.find_element_by_xpath('//a[.="Inbox"]')
您可能还需要等待链接可点击:
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, 10).until(EC.element_to_be_clickable((By.XPATH, '//a[.="Inbox"]')))