2016-03-30 12 views
0

Ich versuche, auf einen Teil einer Webseite klicken, aber ich bekomme die Nachricht "NoSuchElementException: Element kann nicht gefunden werden" .... trotz des Elements ist da.Python Selenium: Xpath-Element nicht gefunden

Der Code verwendet, um zu arbeiten, aber es sieht aus wie es eine Änderung in der Seite gab..aber der Xpath wurde nicht geändert.

Ich habe versucht verschiedene Lösungen von ähnlichen Fragen hier in Stackoverflow, aber etwas ist für dieses Beispiel noch nicht richtig.

Die URL lautet: "http://www.bmfbovespa.com.br/pt_br/servicos/market-data/consultas/mercado-a-vista/codigo-isin/pesquisa/"

Das Element I`m versuchen zu klicken: "Download de Arquivos"

Mein Code:

from selenium import webdriver 


fp = webdriver.FirefoxProfile() 
fp.set_preference("browser.download.folderList",2) 
fp.set_preference("browser.download.manager.showWhenStarting",False) 
fp.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/msword, application/csv, application/vnd.ms-excel, application/ris, text/csv, image/png, application/pdf, text/html, text/plain, application/zip, application/x-zip, application/x-zip-compressed, application/download, application/octet-stream") 
fp.set_preference('browser.helperApps.alwaysAsk.force', False) 



driver = webdriver.Firefox(firefox_profile=fp) 
driver.get("http://www.bmfbovespa.com.br/pt_br/servicos/market-data/consultas/mercado-a-vista/codigo-isin/pesquisa/") 

### 
# Click "Download de arquivos" (the part with problem) 
### 

elem=driver.find_element_by_xpath(".//*[@id='ctl00_contentPlaceHolderConteudo_rtsDetalhe_tabDownload']/span/span") 
elem.click() 

Irgendwelche Gedanken?

Antwort

0

Mehrere Optionen hier:

  • suchen Sie den Link "von id":

    driver.find_element_by_id("ctl00_contentPlaceHolderConteudo_rtsDetalhe_tabDownload") 
    
  • von Link-Text über die "von XPath" Locator:

    driver.find_element_by_xpath("//a[span/span = 'Download de Arquivos']") 
    

Und der wichtige Teil ist, dass das Element ist in einem iframe - Sie müssen zu ihm wechseln.

Arbeitscode:

from selenium import webdriver 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 

driver = webdriver.Firefox() 
driver.get("http://www.bmfbovespa.com.br/pt_br/servicos/market-data/consultas/mercado-a-vista/codigo-isin/pesquisa/") 

driver.switch_to.frame("bvmf_iframe") 

wait = WebDriverWait(driver, 10) 
elem = wait.until(EC.presence_of_element_located((By.ID, "ctl00_contentPlaceHolderConteudo_rtsDetalhe_tabDownload"))) 
elem.click() 
+0

Ich habe versucht, beide .... aber ich bin immer noch der "NoSuchElementException: Kann Element suchen:" getting Nachricht. – fmarques

+0

@fmarques okay, aktualisiert, überprüfen Sie es. – alecxe

+0

Es funktioniert !! Vielen Dank! – fmarques