首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ElementNotVisibleException:消息:元素当前不可见.硒(蟒蛇)

ElementNotVisibleException:消息:元素当前不可见.硒(蟒蛇)
EN

Stack Overflow用户
提问于 2015-12-24 18:23:45
回答 1查看 1.7K关注 0票数 8

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

这个问题在页面上是用来制造小提琴的,所以这里不是对小提琴本身做小提琴,而是一种剪切和粘贴方式,在您的ipython终端中登录并拥有一个webdriver (名为“驱动程序”)(在ipython中输入用户名和密码,而不是页面):

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

现在有了一个驱动程序,您已经登录到jsfiddle中,我在这里所做的一切都失败了,除了第一次选择这个框(假设我想把CSS放到CSS框中):

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

粘贴activate_hidden_element和第一个代码线,然后看到CSS面板亮起。由于某些原因,这个突出显示的面板是“不可见的”,您无法粘贴并在其中编码。这个项目是

代码语言:javascript
运行
复制
  <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)本质上都是相同的。为什么这个活动框不允许文本粘贴进来?谢谢

解决办法:

我让这个服务运作起来的丑陋方式是手工伪造一个剪切和粘贴:

代码语言:javascript
运行
复制
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秒。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-27 22:06:41

JSFiddle编辑器由CodeMirror提供动力,它具有设置编辑器值的编程方法。

对于每个需要放入值的JSFiddle编辑器,使用CodeMirror类定位元素,获取CodeMirror对象并调用setValue()

代码语言:javascript
运行
复制
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代码:

代码语言: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()
>>>

它产生:

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34456584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档