ElementNotVisibleException:消息:元素当前不可见... selenium(python)

时间:2015-12-24 18:23:46

标签: javascript python selenium selenium-webdriver

我正在使用python的selenium获取那些恼人的元素是不可见的异常,而元素是活动的,选择的和闪烁的。

问题是在页面上制作一个jfiddle,所以不是在这里制作一个小提琴的小提琴是一种剪切和粘贴方式登录并在你的ipython终端中有一个webdriver(名为'driver')(输入用户名和密码进入ipython,而不是页面):

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

现在有一个驱动程序,你登录jsfiddle,我在这里做的一切都失败了,除了第一次选择框(让我说我想把CSS放在CSS框中):

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

粘贴$text = urldecode('%d8%aa%d9%81%d8%a7%d9%88%d8%aa-%d8%a8%d8%b1%d8%a7%d8%aa-%d9%88-%d8%a7%d9%84-%d8%b3%db%8c-%d8%af%d8%b1-%da%86%db%8c%d8%b3%d8%aa%d8%9f'); 和第一个代码行,然后看到CSS面板亮起。出于某种原因,这个突出显示的面板“不可见”,您无法粘贴和编码。该项目是

activate_hidden_element

所有其他项目(HTML,JS)基本相同。为什么这个活动框不允许文本粘贴?谢谢

解决方案:

我使这项服务工作的丑陋方式是手动伪造剪切和粘贴:

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

它确实有效,唯一的小问题是它无法在后台运行,我需要单独离开屏幕大约30秒

1 个答案:

答案 0 :(得分:9)

JSFiddle编辑器由CodeMirror提供支持,它具有编程方式来设置编辑器值。

对于每个JSFiddle编辑器,您需要将值放入,使用CodeMirror类找到元素,获取CodeMirror对象并调用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")

演示,使用JS面板执行alert("Test"); Javascript代码:

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