2017-03-01 16 views
0

私は地元の不動産サイトのパーサーを書き始めました。私は私が必要とするページを選択するためにセレンを使用しましたが、私はそれをもう一度到達できない数分後に、それは私に、このエラーを与える:"NoSuchElementException"エラーを解決するには?

NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id="tr_an-357543"]"} 
    (Session info: chrome=55.0.2883.87) 
    (Driver info: chromedriver=2.27.440175 (9bc1d90b8bfa4dd181fbbf769a5eb5e575574320),platform=Linux 4.4.0-21-generic x86_64) 

これはコードの一部です:

driver = webdriver.Chrome() 
url = "https://makler.md/md/" 
driver.get(url) 
driver.maximize_window() 

driver.find_element_by_xpath('//*[@id="rublist_lev1"]/li[1]/a').click() # acces Imobiliare 
driver.find_element_by_link_text("Vânzare apartamente, camere").click() # acces Apartamente 

parentElement = driver.find_element_by_xpath('//*[@id="tr_an-357543"]') 
elementList = parentElement.find_elements_by_tag_name("a") 

links = [] 

for element in driver.find_elements_by_xpath('//article[starts-with(@id, "tr_an-")]//a[@class="ls-detail_anUrl"]'): 
    links.append(element.get_attribute('href')) 


page = driver.get(links[15]) 

caracteristici = driver.find_element_by_xpath('//*[@id="anItemData"]/ul[2]')# Selecteaza blocul caracteristici 
print(caracteristici.text) 

driver.close() 

もう一度 'caracteristici'のxパスをコピー&ペーストすると機能します。この問題を解決するには?

+1

この要素の 'id *'変更は '' * [@ id = "tr_an-357543"] ''ですか?より強固なセレクタが必要なように聞こえます。 htmlを見なくても、それらがどのように見えるのかは言うまでもありません。 – mrfreester

答えて

0

サイトが各ページを読み込むのに数秒かかるようです。あなたはdriverを初期化するときに暗黙的に

driver = webdriver.Chrome() 
driver.implicitly_wait(10) 

または問題の中で明示的に待機し、expected_conditionsを使用します(1時間の初期化)、それらを検索する際の要素がDOMに存在するために与えられた時間まで待つのを待つを定義することができます部品

parentElement = WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH, '//*[@id="tr_an-357543"]')) 

参考のためwaitsです。

関連する問題