【问题标题】:Python splinter fill out text inside iframePython splinter 填充 iframe 内的文本
【发布时间】:2017-07-16 10:41:09
【问题描述】:

我正在使用 splinter 使 autoraptor CRM 自动化,一切都运行顺利,直到需要编写消息。 CRM 的电子邮件编辑器位于 iframe 中。我可以找到带有 splinter 的 iframe,但我无法让它在编辑器中写任何东西。


这里是html

<div id="cke_1_contents" class="cke_contents cke_reset" role="presentation" style="height: 200px;"><span id="cke_67" class="cke_voice_label">Press ALT 0 for help</span><iframe src="" frameborder="0" class="cke_wysiwyg_frame cke_reset" title="Rich Text Editor, email_body" aria-describedby="cke_67" tabindex="0" allowtransparency="true" style="width: 100%; height: 100%;"></iframe></div>

我已阅读Frames, alerts and prompts

这里是 Python


#!/usr/bin/env python 

from splinter import Browser
import urlparse
import time

# Creds
username = "lumberjack@imok.com"
password = "spamspamspam..."

login_url = 'https://ar.autoraptor.com/login'

browser = Browser('chrome')

#help(browser)

# Go to login page
browser.visit(login_url)

# Fill in Username
browser.find_by_name('login').fill(username)

# Fill in 
browser.find_by_name('password').fill(password)

# Click the login Button
browser.find_by_value('Log In').click()

# Navigate to upsheets
#browser.find_by_xpath('//*[@id="nav"]/li[4]/a').click()

# Navigate to least updated upsheets
url = "https://ar.autoraptor.com/upsheets?filter=active&sort=updated_at%5B1%5D"
browser.visit(url)

# Click on notifications
browser.find_by_xpath('//*[@id="nav"]/li[8]/div[1]').click()
time.sleep(5)

# Click on email
browser.find_by_xpath('//*[@id="notification-tab-incoming_email"]/div').click()
time.sleep(5)

# Read email
browser.find_by_text("Email from ").click()

# Send email
browser.find_by_id('newemailplaceholder').click()
time.sleep(5)
browser.find_by_id("cke_1_contents").fill("ftw")
#browser.quit()

这是回溯

Traceback (most recent call last):
  File "testbot.py", line 50, in <module>
    browser.find_by_id("cke_1_contents").find_by_tag("iframe").fill("foo")
  File "/home/ricky/.local/lib/python2.7/site-packages/splinter/driver/webdriver/__init__.py", line 529, in fill
    self.value = value
  File "/home/ricky/.local/lib/python2.7/site-packages/splinter/driver/webdriver/__init__.py", line 511, in _set_value
    self._element.clear()
  File "/home/ricky/.local/lib/python2.7/site-packages/selenium/webdriver/remote/webelement.py", line 92, in clear
    self._execute(Command.CLEAR_ELEMENT)
  File "/home/ricky/.local/lib/python2.7/site-packages/selenium/webdriver/remote/webelement.py", line 493, in _execute
    return self._parent.execute(command, params)
  File "/home/ricky/.local/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 256, in execute
    self.error_handler.check_response(response)
  File "/home/ricky/.local/lib/python2.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 194, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.InvalidElementStateException: Message: invalid element state: Element must be user-editable in order to clear it.
  (Session info: chrome=59.0.3071.115)
  (Driver info: chromedriver=2.30.477691 (6ee44a7247c639c0703f291d320bdf05c1531b57),platform=Linux 4.10.0-26-generic x86_64)

【问题讨论】:

  • 请发布您的代码。尝试后会发生什么?
  • 不清除iframe内的元素,可以先选中吗?得到它的内容?如果没有,则切换到 iframe 是不成功的,这就是您需要关注的问题。

标签: python selenium crm splinter


【解决方案1】:

异常的原因是即使HTML5属性contenteditable="true"也无法输入IFrame。如果您对 HTML 有任何控制权,请尝试以下操作,您会发现如果段落具有上述属性,您实际上可以编辑该段落。如果 HTML 超出您的控制范围,您可以做的是在 Iframe(如果有的话)中找到一个元素 in 允许您与之交互。如果 Iframe 中没有元素,那么您将不得不求助于鼠标/键盘控制器来与 Iframe 交互,这意味着物理移动鼠标并模拟击键。

<div id="cke_1_contents" class="cke_contents cke_reset" role="presentation" style="height: 200px;">
    <span id="cke_67" class="cke_voice_label">Press ALT 0 for help</span>
    <iframe src="" frameborder="0" class="cke_wysiwyg_frame cke_reset" title="Rich Text Editor, email_body" aria-describedby="cke_67" tabindex="0" allowtransparency="true" style="width: 100%; height: 100%;"></iframe>
        <p contenteditable="true">Begin with some text</p>
</div>

【讨论】:

  • 我无法控制第三方拥有的 html autoraptor.com
  • 也许我可以写一个可以篡改html的代理。
  • 现在写代理
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-28
  • 2016-07-14
  • 1970-01-01
  • 2017-10-10
  • 2013-01-23
  • 2010-11-21
相关资源
最近更新 更多