2017-04-14 104 views
0

我正在使用硒,但即時通訊方式與find_element_by_xpath方法有問題。 已經從https://citizenportal.rld.state.nm.us/default.aspx網站本文標籤:selenium find_element_by_xpath返回NoSuchElementException

<a title="Permits" href="javascript:void(0);" module="Permits">Permits</a> 

我試着去創建點擊事件做點擊許可證標籤:

from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 
from selenium.webdriver.common.by import By 

driver = webdriver.Chrome() 
driver.get('https://citizenportal.rld.state.nm.us/default.aspx') 

driver.find_element_by_xpath('//a[@title="Permits"]').click() 

然而即時得到這個錯誤,我不能弄明白

--------------------------------------------------------------------------- 
NoSuchElementException     Traceback (most recent call last) 
<ipython-input-25-ecbedf623e4f> in <module>() 
     6 driver.get('https://citizenportal.rld.state.nm.us/default.aspx') 
     7 
----> 8 driver.find_element_by_xpath('//a[@title="Permits"]').click() 
     9 

C:\Anaconda\lib\site-packages\selenium\webdriver\remote\webdriver.pyc in find_element_by_xpath(self, xpath) 
    304    driver.find_element_by_xpath('//div/td[1]') 
    305   """ 
--> 306   return self.find_element(by=By.XPATH, value=xpath) 
    307 
    308  def find_elements_by_xpath(self, xpath): 

C:\Anaconda\lib\site-packages\selenium\webdriver\remote\webdriver.pyc in find_element(self, by, value) 
    782   return self.execute(Command.FIND_ELEMENT, { 
    783    'using': by, 
--> 784    'value': value})['value'] 
    785 
    786  def find_elements(self, by=By.ID, value=None): 

C:\Anaconda\lib\site-packages\selenium\webdriver\remote\webdriver.pyc in execute(self, driver_command, params) 
    247   response = self.command_executor.execute(driver_command, params) 
    248   if response: 
--> 249    self.error_handler.check_response(response) 
    250    response['value'] = self._unwrap_value(
    251     response.get('value', None)) 

C:\Anaconda\lib\site-packages\selenium\webdriver\remote\errorhandler.pyc in check_response(self, response) 
    191   elif exception_class == UnexpectedAlertPresentException and 'alert' in value: 
    192    raise exception_class(message, screen, stacktrace, value['alert'].get('text')) 
--> 193   raise exception_class(message, screen, stacktrace) 
    194 
    195  def _value_or_default(self, obj, key, default): 

NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//a[@title="Permits"]"} 
    (Session info: chrome=57.0.2987.133) 
    (Driver info: chromedriver=2.29.461591 (62ebf098771772160f391d75e589dc567915b233),platform=Windows NT 6.3.9600 x86_64) 

我試過不同的組合,但它一直返回一個錯誤。我究竟做錯了什麼?

包括孔跨度及其元素的編輯。

<span style="display:inline-block;" id="span_tab_1">      
    <table role="presentation" tag="navbar" border="0" cellspacing="0" cellpadding="0" class="tab_bar_table ACA_Nowrap">       
     <tbody> 
      <tr> 
       <td class="ACA_ItemLeft ACA_LeftOff"></td>         
       <div>           
        <a title="Permits" href="javascript:void(0);" module="Permits">Permits</a>          
       </div> 
       <td class="ACA_ItemCenter ACA_ItemCenter_FontSize ACA_CenterOff"> 
       </td>         
       <td class="ACA_ItemRight ACA_RightOff"></td>       
     </tr>      
<  /tbody> 
    </table>      
</span> 

回答

1

你的XPath是罰款。我更喜歡使用CSS選擇器,例如"a[title='Permit']",因爲它們更快,更好的支持。

問題是你想要的元素是在一個IFRAME中。

<iframe id="ACAFrame" name="ACAFrame" ... src="/Welcome.aspx"> 

您將需要切換到該框架,然後您的發現將工作。

查看this page瞭解更多詳情。

0

錨標籤沒有一個標準的標題屬性:https://www.w3schools.com/tags/tag_a.asp


我建議使用:

driver.find_element_by_link_text('Permits').click() 

每:http://selenium-python.readthedocs.io/locating-elements.html#locating-hyperlinks-by-link-text

+0

有沒有辦法獲得標題參考?似乎在網站正文中還有其他「許可證」參考 – user7331243

+0

據我可以從他們的文檔中知道,沒有。錨標籤環境中的「許可證」的其他情況? – JacobIRR

+0

是的,它會去另一個網站,而不是我需要去的那個網站。我包括整個跨度部分以提供更多的上下文。我嘗試使用id = span_tab_1進行點擊事件,但也返回了錯誤 – user7331243

0

每當您嘗試搜索iframe中的元素時,必須必須將焦點切換到您正在處理的iframe

搜索的iframe中的元素之前:

driver.switchTo().frame(driver.findElement(By.name("iframeTitle"))); 

在這種情況下,iframe的標題是:ACAFrame

以下

被更新的代碼:

driver = webdriver.Chrome() 
driver.get('https://citizenportal.rld.state.nm.us/default.aspx') 
driver.switchTo().frame(driver.findElement(By.name('ACAFrame'))); 
driver.find_element_by_xpath('//a[@title="Permits"]').click() 
相關問題