2017-07-09 5 views
0

thisページをスクレイプして、世代データを後でパーサに渡すようにしています。JavaScriptで塗りつぶされたページ

私の問題は、テーブルが別のサーバーに要求を行う複数のスクリプトによって作成されていることです。美しいスープはページを傷つけますが、javascriptは実行されません。だから私はセレンを使用して、ブラウザでページを開いて、ポピュレートされたテーブルを掻き集めようとしています。

私のコードを実行すると、Firefoxがページを読み込んで閉じますが、BSはまだテーブルが読み込まれずにページを返します。一度完全にロードされたウェブコンソールを使用してページを検査しようとしましたが、必要なデータが表示されます。つまり、1つのデータポイントはdivタグのclass = "r11"に含まれています。このタグを検索するとNoneが返されます。

私はセレンを間違って使用している、またはb)ページの書式設定がサーバーの「サブ文書」(正しい用語がわからない)とかなり深く入れ子になっているように見えるためです。

from selenium import webdriver 
from selenium.common.exceptions import NoSuchElementException 
from selenium.webdriver.common.keys import Keys 
from bs4 import BeautifulSoup 

arg_therm = ('http://portalweb.cammesa.com/MEMNet1/Pages/Informes%20por%20' 
     'Categor%C3%ADa/Operativos/VisorReporteSinComDesp_minimal.asp' 
     'x?hora=0&titulo=Despacho%20Generacion%20Termica&reportPath=' 
     'http://lauzet:5000/MemNet1/ReportingServices/Despacho' 
     'GeneracionTermica.rdl--0--Despacho+Generaci%c3%b3n+T%c3%a9rmica') 


browser = webdriver.Firefox() 
browser.get(arg_therm) 
html_source = browser.page_source 

browser.quit() 

soup=BeautifulSoup(html_source,'lxml') 

print(soup.prettify()) 

print(soup.find('div', {"class": "r11"})) 

答えて

1

てみ必要なテーブルを取得するためのコードの下に使用する:

from selenium.webdriver.support.ui import WebDriverWait as wait 
from selenium.webdriver.support import expected_conditions as EC 
from selenium.webdriver.common.by import By 

browser = webdriver.Firefox() 
browser.get(arg_therm) 

browser.switch_to.frame(browser.find_element_by_xpath('//iframe[starts-with(@name, "RportFramectl00")]')) 
browser.switch_to.frame('report') 

table_cells = wait(browser, 10).until(EC.presence_of_all_elements_located((By.CLASS_NAME, "r11"))) 
for cell in table_cells: 
    print(cell.text) 

これはこのコードは素晴らしい作品に必要な要素の外観を待つと、それらのDIV

+0

のあなたのリストを返す必要があります。それは私が必要とした情報を正確に返します。 – Chris

関連する問題