2017-04-30 13 views
0

iframeのIDが動的であるようです(リフレッシュで変更されているようです)ので、一時的に接続していて呼び出しを実行できません(すべての結果は空のリストです)。だから私はiframeの内容を見ようとしていますが、それもエラーの原因になります。 iframeに接続して呼び出しを実行できる方法はありますか?SeleniumのIframeに接続できないようです

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

driver = webdriver.Firefox() 
driver.get('http://investsnips.com/list-of-publicly-traded-micro-cap-diversified-biotechnology-and-pharmaceutical-companies/') 
#driver.find_element_by_xpath('//*[@id="tradingview_4e896"]') 
time.sleep(20) 
#driver.switch_to.frame("tradingview_21872") 
iframe = driver.find_elements_by_tag_name('iframe')[1] # 0 is resulting in an error 
driver.switch_to_frame(iframe) 
iframe.tag_name 

は、エラーが生じされています:

StaleElementReferenceException: Message: The element reference of <iframe id="tradingview_d311f"> stale: either the element is no longer attached to the DOM or the page has been refreshed

+0

あなたはなぜfind_elements' – kushal

+0

次のような何かを試すことができます '使用している、インデックスを与えることによって、単一の要素を提供している場合:'範囲のI(1,20)について:driver.switch_to_frame(I) ' – kushal

答えて

2

のiframeに切り替えるには、このタスクを達成するための3つの方法があります。ウェブページ上のiframe探し

のインデックスを使用することにより

1.、私は、ページ上の4つのiframeがあることがわかり、あなたは(インデックス= 2を持つ)第三1に興味を持っています。 IFRAMEこのオプション、nameフィールドを持っていない、とユニークなidを持っていないので、だから、IFRAME

の名前またはIDを使用することにより

driver.switch_to_frame(2)

2を使用することができますこのシナリオでは役に立たない。

3のiframe

のWebElementを使用することによりあなたはWebElementとしてiframeを取得することができますし、それにフォーカスを切り替えます。 iframeのWebElementは、xpathを使用して取得できます"//iframe[contains(@id, 'tradingview')]"

+0

おっと私はあなたが含まれて参照してください。これは機能するかもしれません。 – Moondra

+0

本当ですか?このxpathは私のために働きます。あなたは私の答えを正しいxpathで編集するか、コメントで投稿して、私の答えを改善することができます。この方法でそれは受け入れられるとマークすることができます –

+0

ありがとう、私はあなたの答えを受け入れ、別の方法を提供しました。 – Moondra

1

Chrome経由でXpathをコピーすることで動作させることができました。

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

driver = webdriver.Firefox() 

driver.get('http://investsnips.com/list-of-publicly-traded-micro-cap-diversified-biotechnology-and-pharmaceutical-companies/') 
time.sleep(20) 


x= driver.find_element_by_xpath('/html/body/div[1]/div/div/article/div/div[2]/div/div[2]/div[1]/div/div/div[1]/iframe') 

driver.switch_to_frame(x) 
関連する問題