2016-05-13 36 views
2

私はページに移動してすぐにページの少しだけをキャプチャすると、完全にレンダリングされた後に、ページソースをキャプチャするようにしようとしています30秒間スリープ状態にするとレンダリングが完了しますが、効率的にしたいと考えています。XHRリクエストやPythonのSeleniumのコンソールメッセージ

例としてhttps://twitter.com/i/notificationsを使用すると、ページが読み込まれてから5秒後にtoast_pollとタイムラインXHRリクエストがあることがわかります。

これらの要求の1つを検出し、1つが起動するまで待つことができれば、それはページが完全にロードされたことを示す指標です。

Doneが、その後、そのコンソールに表示されるまで、私はPhantomJSでコンソールコマンドを検出することができればそう& Firefoxは、これはXHRリクエストを待っているよりも良い選択となる火災 console.log("Done")を使用していますサイトは、待つだけ

ページが完全にロードされたことを示すインジケータです。このポストの重複フラグ付けについて

この質問はPhantomJSとFirefoxに関してであり、ポストDetect javascript console output with pythonは年以上前からのものであり、与えられた答えは、私が探しています、Chromeで動作しますPhantomJSFirefoxオプションは、私がStackOverflowに基づいてすでに考えているとは思えません。それが私の投稿の私のスタートがXHRリクエストを待っている理由です。

私は

from seleniumrequests import PhantomJS 
from seleniumrequests import Firefox 
from selenium import webdriver 
import os 

webdriver.DesiredCapabilities.PHANTOMJS['phantomjs.page.customHeaders.User-Agent'] = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/37.0.2062.120 Chrome/37.0.2062.120 Safari/537.36' 
webdriver.DesiredCapabilities.PHANTOMJS['loggingPrefs'] = { 'browser':'ALL' } 

browser = PhantomJS(executable_path="phantomjs.exe", service_log_path=os.path.devnull) 
browser = webdriver.Firefox() 
browser.set_window_size(1400, 1000) 

url = "https://website.com" 
browser.get(url) 

for entry in browser.get_log('browser'): 
    print entry 

私はすでに、次のコードを試してみたが、それは私のために動作しません..私はウェブサイトが(「完了」)はconsole.logを投げているにもかかわらず、ゼロ応答を取得私がDesiredCapabilitiesの2つのロットを設定する方法がわからないので、browser = webdriver.Firefox()でテストすることができませんでした。

+0

[パイソンでJavaScriptコンソール出力を検出]の可能な複製を(http://stackoverflow.com/questions/28678872/detect-javascript-console-output-with-python) – salomonderossi

+0

@salomonderossiこれはPhantomJSとFirefoxに関するものですが、その投稿はChromeについてのみです、私はPhantomJSとFirefoxのオプションを探しています。 StackOverflowに基づいて考えることができないので、私の投稿の私のスタートはXHRリクエストを待つことです。 – Ryflex

+0

imho Firefox、Safari、IE、またはヘッドレスPhantomJSブラウザを使用することもできます – salomonderossi

答えて

1

あなたはconsole.log関数をオーバーライドし、execute_async_scriptで「完了」メッセージを待つこともできます

from selenium import webdriver 

driver = webdriver.Firefox() 
driver.set_script_timeout(10) 

driver.get("...") 

# wait for console.log("Done") to be called 
driver.execute_async_script(""" 
    var callback = arguments[0]; 
    console.log = function(message) { 
    if(message === "Done") 
     callback(); 
    }; 
    """) 
関連する問題