查找具有多个元素(Selenium webdriver Python 3)

时间:2019-01-07 20:02:36

标签: python selenium selenium-webdriver xpath css-selectors

我正在使用Selenium(Chrome)Webdriver( Python 3 )在名为“收件箱”的页面上找到一个按钮(然后单击它),但是我反复得到“ NoSuchElementException:消息:没有这样的元素:无法找到元素。”

这很可能是由于html中有许多不间断空格(&nbsp)(请参见下文)

         <tr>
            <td class="MENUCHOICE">
               "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                       " == $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']")

1 个答案:

答案 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"]')))