2017-11-12 1 views
1

Seleniumを使用して、すべてのiframeタグにネストされたHTMLドキュメントを取得しようとしています。私はiframeの中でHTMLを取得することができますが、私が望むすべてのソースコードなしで私を残して、私は実行されていないと信じているタグがあります。 HTMLを取得してjavascriptを実行し、javascriptを実行した後で新しいHTMLを処理する方法はありますか?Web-scraping HTML、javascriptが実行されていないため、HTMLが欠落しています。 DOMを編集するためにすべてのスクリプトタグを実行するにはどうすればよいですか?

コード:

from bs4 import BeautifulSoup 
import requests 
from selenium import webdriver 
from selenium.webdriver.support.ui import WebDriverWait 
import time 

browser = webdriver.Chrome('C:/Users/G/chromedriver.exe') 

browser.get("http://www.reddit.com") 

time.sleep(1) 

innerHTML = browser.execute_script("return document.body.innerHTML") 

time.sleep(1) 

iframes = browser.find_elements_by_tag_name("iframe") 

time.sleep(1) 

for iframe in iframes: 

    browser.switch_to_default_content() 
    browser.switch_to_frame(iframe) 

    source = browser.page_source  

    time.sleep(1) 

    print(source) 
+0

「実行されていない」タグはどのようなタグですか、なぜこれを信じますか? – kindall

+0

HTMLファイルでjavascriptを実行するとDOMに追加できます。 iframeの内部HTMLを取得して印刷すると、実行されていない大きなスクリプトタグが1つだけ取得されます。あなたがクロム・インスペクタを使ってページ・ソースを見ると、私のプリント・ステートメントからは見えないHTMLが増えているので、彼らは「実行されていない」と私は信じています。 – user8922432

+0

何もスクレイピングのためにtampermonkeyを打ち負かす、何も。 – dandavis

答えて

0

私が正しくあなたの質問を理解している場合は、innerHTMLはすべてタグ内にネストを取得しようとしているので、まず我々はswitch_to_frame最初Seleniumに必要フレームが表示されている場合はswitch_to_frameのみ可能です。これを実現するには、次のコードブロックを使用することができます。

iframes = driver.find_elements_by_tag_name("iframe") 
for iframe in iframes: 
    WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it("iframe")) 
    print(driver.page_source) 
    driver.switch_to_default_content() 
関連する問題