2017-07-20 10 views
-1

公式サイトから中国経済データを抜き取ろうとしていますが、ここで最後の行にElement Not Found例外が発生しています。私はstackoverflowを精査し、implicitly_waitを追加して問題の行をxpathからIDに切り替えようとしましたが、何も効果がありませんでした。何かご意見は?Selenium(Python)でWebスクレイピングが発生する要素が見つかりません

from selenium import webdriver 


FAI = [] 
FAIinfra = [] 
FAIestate = [] 

path_to_chromedriver = '/Users/cargillsk/Downloads/chromedriver' 
browser = webdriver.Chrome(executable_path = path_to_chromedriver) 

browser.implicitly_wait(30) 

url = 'http://www.cqdata.gov.cn/easyquery.htm?cn=A0101' 
browser.get(url) 
browser.find_element_by_id('treeZhiBiao_4').click() 
browser.find_element_by_xpath('//* 
[@id="mySelect_sj"]/div[2]/div[1]').click() 
browser.find_element_by_xpath('//* 
[@id="mySelect_sj"]/div[2]/div[2]/div[3]/input').clear() 
browser.find_element_by_xpath('//* 
[@id="mySelect_sj"]/div[2]/div[2]/div[3]/input').send_keys('last100') 
browser.find_element_by_xpath('//* 
[@id="mySelect_sj"]/div[2]/div[2]/div[3]/div[1]').click() 
FAIinitial = browser.find_element_by_xpath('//*[@id="main-container"]/div[2]/div[2]/div[2]/div/div[2]/table/thead/tr/th[2]/strong').text 

for i in range(2,102): 
    i = str(i) 
    FAI.append(browser.find_element_by_xpath('//*[@id="table_main"]/tbody/tr[1]/td[%s]' % i).text) 
    FAIinfra.append(browser.find_element_by_xpath('//*[@id="table_main"]/tbody/tr[4]/td[%s]' % i).text) 
    FAIestate.append(browser.find_element_by_xpath('//*[@id="table_main"]/tbody/tr[55]/td[%s]' % i).text) 

browser.find_element_by_id("treeZhiBiao_3").click() 
browser.find_element_by_id("treeZhiBiao_14").click() 
+0

トライリフォーカス 'あなたはstackoverの流れを精練 – redp

+0

をbrowser.switch_to.active_element'、あなたが見つけた唯一のものは、暗黙の待ち時間であるとid XPathを変え、どのように明示的な待ち時間について、IFRAME? –

+0

Gaurang、時々愚かに聞こえると私は謝罪しますが、私はPythonを自前で教えることが非常に難しいと思っています。私はほんの数週間でです。Re:あなたのコメント、暗黙の待ちがうまくいかない場合、前者はプログラム全体をカバーしているため明示的に待機しません。私はフレームのためのhtmlを見たが、何も見つかりませんでした。 Redp、あなたのヒントありがとうが、残念ながらそれは私のために働いていない。まだこれを理解することはできません。 – triplepla1

答えて

0

だから暗黙の待ちはあなたの問題ではありません。ウェブサイトのコードを見てみると、「treeZhiBiao_14」がないことがわかりましたので、ここをクリックしようとしているのかどうかはわかりません。たぶんあなたのクリックを知っているので、代わりにこのようなものを使用してみてください。

browser.find_element_by_xpath("//*[contains(text(), '工业')]").click() 

または

browser.find_element_by_xpath("//*[contains(text(), 'industry')]").click() 
+0

これはうまくいきました。ありがとうございました。 "treeZhiBiao_14"は私が見ているコードに間違いありません...しかし、私はこの問題を一週間見てきたので心配しません!もう一度あなたの助けに感謝します。 – triplepla1

+0

問題ありません!間違いなくより少ない直接パスを使用してみてください。ウェブサイトが要素の位置を変更または移動することがあり、コードを完全に駄目にすることがあります。 – Jake

関連する問題