2017-09-28 14 views
-2

APIのウェブサイトから多くのページをウェブでスクレイピングしたいので、要素を読み込むのを待たなければなりません。しかし、time.sleep(5)は、次のページに瞬時にジャンプしているため、動作していません。なぜ私のtime.sleep(x)コードがpythonのdebianで動作しないのですか?

私は間違っていますか?

マイコード:

def scrape(urls): 
    browser = webdriver.Firefox() 
    datatable=[] 
    for url in urls: 
     browser.get(url) 
     time.sleep(5) 
     driver.find_element_by_xpath('//button[contains(text(), "Load earlier flights")]').click() 
     time.sleep(5) 
     html = browser.page_source 
     soup=BeautifulSoup(html,"html.parser") 
     table = soup.find('table', { "class" : "table table-condensed table-hover data-table m-n-t-15" }) 
     soup2=BeautifulSoup(html,"html.parser") 
     name = soup2.h2.string 
     soup3=BeautifulSoup(html,"html.parser") 
     name2 = soup3.h1.string 
     soup4=BeautifulSoup(html,"html.parser") 
     name3 = soup4.h3.string 
     name4 = datetime.now() 

     for record in table.find_all('tr', class_="hidden-xs hidden-sm ng-scope"): 
      temp_data = [] 
      temp_data.append(name4) 
      temp_data.append(name) 
      temp_data.append(name2)  
      temp_data.append(name3)  
      for data in record.find_all("td"): 
       temp_data.append(data.text.encode('latin-1')) 
      newlist = filter(None, temp_data) 
      datatable.append(newlist) 

    time.sleep(10) 
    browser.close() 
    return datatable 

最初のURLは:seleniumが提供する明示的および暗黙の待機を使用し、time.sleepを使用しないでください

+2

を見つけることができます**同じ内容持つスープ(ヒントを、あなたがする必要はありません!) –

+1

(time.sleep 'に頼る)'するページを待ちます完全に装填されたものはせいぜい脆弱である。 –

+0

待っている要素などのより良い解決策がありますが、私のコードでtime.sleep()が動作しない理由に興味があります。 –

答えて

0

をflightradar24.com/data/airports/ams/arrivals。

+0

そしてここに私のコードで私はそれを使用する必要がありますか? "ドライバ= webdriver.Firefox() driver.implicitly_wait(10) driver.get(" URL ") myDynamicElement = driver.find_element_by_name(" ロード以前の飛行 ")" ? –

+0

暗黙の待ちをしたい場合は@ Mr.D、はい。しかし、コードを最適化して明示的に待機することができます。 –

0

私はセレニウムに付属の "expected_conditions"を使用します。

などです。

 from selenium.webdriver.support import expected_conditions as EC 

     Def someFunc(self): 
      self.myDriver = webdriver.Chrome(executable_path="webDrivers\chromedriver.exe") 
      self.waitElement = WebDriverWait(self.myDriver,10) 
      self.waitElement.until(EC.presence_of_all_elements_located((By.CLASS_NAME,'page-link'))) 
      #do something with page 

これは、セレンが配置されているすべてのクラス名「ページリンク」に対して10秒間待機します。 なぜあなたは** 4を作成するのですあなたはより多くの情報Here

関連する問題