2017-12-11 23 views
1

トロント証券取引所からインサイダー取引情報を抽出するコードを書いた。 Seleniumを使用して、this linkを開き、在庫のリストを使用して、フォームに1つずつ入力し、データを取得して別のリストに入れて、次の在庫に対して同じ処理を行います。ここでSelenium/Python - Lag In Code?

コードです:

from selenium import webdriver 

stocks = ['RKN','MG','GTE','IMO','REI.UN','RY'] 
dt = [] 

url = 'https://app.tmxmoney.com/research/insidertradesummaries?locale=EN' 

driver = webdriver.Firefox() 
driver.get(url) 

search = driver.find_element_by_xpath('//ul[@class="nav nav-pills"]/li[3]') 
search.click() 

stock_form = driver.find_element_by_name('text') 

for stock in stocks: 
    stock_form.clear() 
    stock_form.send_keys(stock) 
    stock_form.submit() 
    data = driver.find_element_by_xpath('//div[@class="insider-trades-symbol-search-container"]/div[@class="ng-binding"]') 
    a = data.text.split('\n') 
    if len(a) > 1: 
     dt.append(a[-1].split()) 
    else: 
     dt.append([]) 

driver.close() 

あなたがコードを実行する場合は、各株式は、フォームに入力されて見ることができ、データがポップアップ表示されます、私はそれを取得しよう。しかし、私は "データ"からテキストを取得すると、フォームを送信する前にページに表示されていたものから取得したものと同じです。私は無駄にコードに待ち時間を追加しようとしました。

+0

私は実際には最初のものは空のリストである6つの項目を含む 'dt'リストを取得していますが、すべての残りの部分は、' [「RKN」、「1008600」から始まる異なるリストである「0」、 '1,0'、 '1,0'、 '0'、 '0'、 'C​​DN'] 'で終わり、' ['REI.UN'、'96,717 '、' 0 '、' 2,402,151 '、' 0 '、294 '、' 0 '、' CDN ']'となります。これはあなたがそれを返すものですか?はいの場合は、タイミングの問題があると思います。 – alecxe

+0

はい、ありがとうございます。それが私の言いたいことです。最初のエントリは、dtリストのRKN用でなければなりません。最後は空でなければならず、在庫には何の活動もなかった(私は信じている)。 –

+0

解決策: 'data'と 'a'の間にtime.sleep(1)を追加してください。私はそこに、私が何と呼ぶか​​、遅れがあると思います。 –

答えて

0

time.sleep(1)を追加し、コードは意図したとおりに動作します。

from selenium import webdriver 
import time 

stocks = ['RKN','MG','GTE','IMO','REI.UN','RY'] 
dt = [] 

url = 'https://app.tmxmoney.com/research/insidertradesummaries?locale=EN' 

driver = webdriver.Firefox() 
driver.get(url) 

search = driver.find_element_by_xpath('//ul[@class="nav nav-pills"]/li[3]') 
search.click() 

stock_form = driver.find_element_by_name('text') 

for stock in stocks: 
    stock_form.clear() 
    stock_form.send_keys(stock) 
    stock_form.submit() 
    data = driver.find_element_by_xpath('//div[@class="insider-trades-symbol-search-container"]/div[@class="ng-binding"]') 
    a = data.text.split('\n') 
    **time.sleep(1)** 
    if len(a) > 1: 
     dt.append(a[-1].split()) 
    else: 
     dt.append([]) 

driver.close()