2017-09-18 13 views
1

私はPythonでセレンパッケージを使用して動的Webサイトを保存して保存しようとしています。しかし、私は混在した成功を収めています。私は正常に保存されたページとそうでないページとの間に違いがあることに気づいた。成功したHTMLソースでは、Selenium Python:JS変数がtrueであることを確認してください

<script language="javascript" type="text/javascript"> 
var PageIsReady = true; 
</script> 

が表示され、その他の場合は、var PageIsReadyはfalseです。変数がtrueになった後で保存をトリガーできる方法はありますか?

このstackoverflow questionは、タイムアウトを行う方法を示していますが、スクリプト変数の値からトリガーしたいときにタグの存在を探します。

答えて

0

あなただけの正確なテキストコンテンツを<script>まで待って、PageIsReadyの値を処理する必要はありませんDOMに表示されます。

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

WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//script[normalize-space()="var PageIsReady = true;"]'))) 
1

がこの問題の素敵な解決策は、カスタム待機条件を実装することができ変数が定義されるかどうかをチェックします。

class js_variable_evals_to_true(object): 
    def __init__(self, variable): 
     self.variable = variable 
    def __call__(self, driver): 
     return driver.execute_script("return {0};".format(self.variable)) 

使用法:条件は、この(徹底的にテストしていない、注意してください)のようなものを見なければならないでしょう

from selenium import webdriver 
from selenium.webdriver.support.ui import WebDriverWait 

chrome = webdriver.Chrome() 
chrome.get("http://google.com") 
try: 
    element = WebDriverWait(chrome, 10).until(js_variable_evals_to_true("toolbar.visible") 
finally: 
    chrome.quit() 

をカスタム待つ条件を実装する方法を学ぶためにセレンのドキュメントでsource codeを確認してください。

関連する問題