2015-12-24 12 views
8

Ich bekomme diese lästige Element ist nicht sichtbar Ausnahme mit Pythons Selen, während das Element aktiv ist, ausgewählt und blinkt.ElementNotVisibleException: Nachricht: Element ist derzeit nicht sichtbar ... Selen (Python)

Das Problem ist auf der Seite, um ein Problem zu machen, also anstatt eine Geige der Geige selbst hier ist ein Ausschneiden und Einfügen Weg, um sich anzumelden und einen Webdriver (namens 'Treiber') in Ihrem ipython Terminal (geben Sie Benutzernamen und Passwort in ipython, nicht die Seite):

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

nun ein Fahrer da oben ist, und Sie sind in jsfiddle angemeldet, alles, was ich hier tun nicht, außer Sie die Box zum ersten Mal Kommissionierung (sagen wir, Ich möchte CSS in der CSS-Box löschen):

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

Paste activate_hidden_element und die erste Codezeile in und sehen die CSS-Panel aufleuchten. Aus irgendeinem Grund ist dieses hervorgehobene Feld nicht sichtbar und Sie können es nicht einfügen und codieren. Das Einzelteil ist

<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> 

Alle anderen Einzelteile (HTML, JS) sind im Wesentlichen das selbe. Warum erlaubt diese aktive Box das Einfügen von Text nicht? Danke

LÖSUNG:

die hässliche Art, wie ich diesen Dienst Arbeit gemacht ein Ausschneiden und Einfügen manuell Fälschung war:

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") 

Es funktioniert, ist die einzige kleinere Problem ist, kann es nicht laufen im Hintergrund muss ich den Bildschirm für etwa 30 Sekunden allein lassen

+0

das letzte Ziel ist es, die Textarea zu füllen, das ist richtig? –

+0

yessir, in der Lage sein, alle diese Textbereiche zu füllen html, css und javascript – codyc4321

Antwort

9

JSFiddle-Editoren werden von CodeMirror angetrieben, die eine programmatische Möglichkeit hat, Editor-Werte festzulegen.

Für jeden JSFiddle Editor Sie müssen in Werte setzen, um das Element mit einem CodeMirror Klasse zu lokalisieren, erhalten die CodeMirror Objekt und rufen setValue():

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") 

Demo, mit JS-Panel die alert("Test"); Ausführung 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() 
>>> 

Es produziert:

enter image description here

+0

wie auf der Erde könnte man das wissen :) danke – codyc4321

+0

Ich brauche so etwas für mein eigenes Projekt, scheint es Open Source. schätze es, Alex – codyc4321

Verwandte Themen