【问题标题】:Input text into textarea for codemirror python selenium为codemirror python selenium输入文本到textarea
【发布时间】:2023-04-06 23:49:02
【问题描述】:

我是 selenium 的新手,正在尝试将文本输入到 CodeMirror 生成的文本区域中。我查看了有关 textarea 的其他问题,但无法解决我的问题。

我正在使用 Chrome,并在 textarea 所在的源中找到并且能够单击它以使光标闪烁。但是,我发现它没有任何属性。如何在文本区域中输入文本?我尝试了其他元素,但出现“无法聚焦”或“不可见”错误,我猜这意味着这些元素不是文本区域。

a= browser.find_element_by_css_selector('div.CodeMirror.CodeMirror-wrap.dojoDndTarget.cm-s-sql.dojoDndContainer').click()
print a
None

我意识到添加长源代码可能对其他用户不方便,但我不确定哪条 CodeMirror 行可能引用 textarea 并为了完整起见将其发布。这是源代码以及屏幕截图。

<div class="CodeMirror CodeMirror-wrap dojoDndTarget cm-s-sql dojoDndContainer" style="font-size: 12px; font-weight: normal;">
<div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 4px; left: 4px;">
<textarea autocorrect="off" autocapitalize="off" spellcheck="false" style="position: absolute; padding: 0px; width: 1000px; height: 1em; outline: none;" tabindex="0">
</textarea>
</div>
<div class="CodeMirror-vscrollbar" not-content="true" style="min-width: 18px;">
<div style="min-width: 1px; height: 0px;">
</div>
</div>
<div class="CodeMirror-hscrollbar" not-content="true" style="min-height: 18px;">
<div style="height: 100%; min-height: 1px; width: 0px;">
</div>
</div>
<div class="CodeMirror-scrollbar-filler" not-content="true">
</div>
<div class="CodeMirror-gutter-filler" not-content="true">
</div>
<div class="CodeMirror-scroll" tabindex="-1">
<div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: 0px; border-right-width: 30px; min-height: 24px; padding-right: 0px; padding-bottom: 0px;">
<div style="position: relative; top: 0px;">
<div class="CodeMirror-lines">
<div style="position: relative; outline: none;">
<div class="CodeMirror-measure">
</div>
<div class="CodeMirror-measure">
</div>
<div style="position: relative; z-index: 1;">
</div>
<div class="CodeMirror-cursors" style="">
<div class="CodeMirror-cursor" style="left: 4px; top: 0px; height: 16px;">&nbsp;</div></div><div class="CodeMirror-code">
<pre class="">
<span style="padding-right: 0.1px;">
<span>
</span>
</span>
</pre>
</div>
</div>
</div>
</div>
</div>
<div style="position: absolute; height: 30px; width: 1px; top: 24px;"></div><div class="CodeMirror-gutters" style="display: none; height: 197px;">
</div>
</div>
</div>

谢谢。

【问题讨论】:

    标签: python css selenium-chromedriver codemirror


    【解决方案1】:

    在 Selenium 中,WebElement#click() 不返回任何内容。如果您想在单击后与元素对象进一步交互,则需要先将其保存到变量中。

    但更重要的是,您点击的是包含&lt;textarea&gt;&lt;div&gt;,而不是&lt;textarea&gt; 本身。即使单击&lt;div&gt; 获得&lt;textarea&gt; 焦点,您的元素对象仍将是包含&lt;div&gt; 的句柄,它不会对send_keys() 做出有意义的反应。如果&lt;textarea&gt; 是用户输入文本的地方,您必须找到那个元素并与之交互:

    textarea = browser.find_element_by_css_selector('.CodeMirror textarea')
    

    (除非&lt;textarea&gt; 被禁用并且需要额外的步骤来启用它,否则您无需click() 即可开始输入。)

    然后只需send_keys() 即可:

    textarea.send_keys('alert("Hello, World!")')
    

    【讨论】:

    • 我试过你说的,还是不行。我认为
    • 我没有注意到 DOM 中有一个 actual &lt;textarea&gt;。我相应地更新了答案。让我知道这是否解决了问题。
    • 感谢您解决了我的问题。事实证明 textarea 被禁用并且需要点击。
    • 谢谢!你是救生员!我曾尝试将 xpath 输入页面上的每个文本区域。它没有工作。然后我尝试使用您提供的 css 选择器。即使它指向一个文本区域,它也能立即生效。
    猜你喜欢
    • 2016-08-16
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 2017-04-29
    • 2018-01-07
    • 1970-01-01
    • 2023-03-29
    • 2021-07-03
    相关资源
    最近更新 更多