2015-12-24 18 views
8

要素がアクティブで、選択されていて、点滅している間、これらの面倒な要素がPythonのセレニウムを使用して表示されません。ElementNotVisibleException:メッセージ:要素が現在表示されていません...セレニウム(Python)

問題はjfiddleを作るためのページです。ここでは、フィドル自体のフィドルを作成する代わりに、ログインしてipython端末にwebdriver(ドライバ名) ipythonにユーザー名とパスワードを入力し、いないページ):

https://gist.github.com/codyc4321/787dd6f62e71cc71ae83

今そこにドライバーであり、あなたがjsfiddleにログインしている、私はここで行うすべてがボックスを最初に選ぶ除いて失敗した(のは言わせて私はCSSボックスにCSSをドロップしたい):

https://gist.github.com/codyc4321/f4c03c0606c2e3e4ff5b

ペーストactivate_hidden_elementと最初のコードラインが入り、CSSパネルが点灯します。なんらかの理由で、このハイライトされたパネルは「表示されません」であり、ペーストしてコード化することはできません。アイテムは

<div class="window top" id="panel_css" data-panel_type="css"> 
    <textarea id="id_code_css" rows="10" cols="40" name="code_css"></textarea> 
    <a href="#" class="windowLabel" data-panel="css"> 
     <span class="label">CSS</span><i class="bts bt-gear"></i> 
    </a> 
    </div> 

です。他のすべてのアイテム(HTML、JS)は基本的に同じです。このアクティブなボックスでテキストを貼り付けることができないのはなぜですか?ありがとう

SOLUTION:

css_content = get_inline_content_and_remove_tags(webpage_content, 'style') 

js_content = get_inline_content_and_remove_tags(webpage_content, 'script') 

webpage_content = # ...clean cruft... 

def copy_paste_to_hidden_element(content=None, html_id=None): 
    pyperclip.copy(content) 
    activate_hidden_element(html_id=html_id, driver=driver) 
    call_sp('xdotool key from+ctrl+v') 
    time.sleep(1) 

copy_paste_to_hidden_element(content=webpage_content, html_id="panel_html") 
copy_paste_to_hidden_element(content=js_content, html_id="panel_js") 
copy_paste_to_hidden_element(content=css_content, html_id="panel_css") 

それは作業を行い、わずかな問題があるにそれを実行することはできません。私は、このサービスの仕事をした醜い方法は手動で偽のカット&ペーストすることでした

バックグラウンドでは、私は約30秒間だけ画面を離れる必要があります

+0

最終的な目標は、テキストエリアを埋めることです。 –

+0

yessir、これらすべてのテキスト領域をHTML、CSS、およびJavaScriptに書き込むことができる – codyc4321

答えて

9

JSFiddle編集者はプログラムで編集者の値を設定する方法があります。 alert("Test");を実行するJSパネルを使用して

css_panel = driver.find_element_by_id("panel_css") 

code_mirror_element = css_panel.find_element_by_css_selector(".CodeMirror") 
driver.execute_script("arguments[0].CodeMirror.setValue(arguments[1]);", 
         code_mirror_element, 
         "test") 

デモ、:あなたは、に値を入れCodeMirrorクラスを持つ要素を探し、CodeMirrorオブジェクトを取得し、setValue()を呼び出す必要があり、すべてのJSFiddleエディタについては

Javascript code:

>>> from selenium import webdriver 
>>> 
>>> driver = webdriver.Firefox() 
>>> driver.get("https://jsfiddle.net/user/login/") 
>>> driver.find_element_by_id("id_username").send_keys("user") 
>>> driver.find_element_by_name("password").send_keys("password") 
>>> driver.find_element_by_xpath("//input[@value = 'Log in']").click() 
>>> 
>>> driver.get("https://jsfiddle.net/") 
>>> 
>>> js_panel = driver.find_element_by_id("panel_js") 
>>> 
>>> code_mirror_element = js_panel.find_element_by_css_selector(".CodeMirror") 
>>> driver.execute_script("arguments[0].CodeMirror.setValue(arguments[1]);", code_mirror_element, "alert('test');") 
>>> 
>>> driver.find_element_by_id("run").click() 
>>> 

enter image description here

+0

地球上でどのようにこれを知っていたでしょうか?ありがとう – codyc4321

+0

私は自分のプロジェクトにこのようなものが必要です。それを感謝するアレックス – codyc4321

関連する問題