【发布时间】:2014-07-06 20:12:19
【问题描述】:
我已经用这个把头撞到墙上已经足够长的时间了,所以我现在可以转过来了。
我有一个带有 iframe 的页面:
<iframe frameborder="0" allowtransparency="true" tabindex="0" src="" title="Rich text editor, listing_description" aria-describedby="cke_18" style="width:100%;height:100%">
当我通过 xpath 使用时:
'//*[@aria-describedby="cke_18"]'
我得到一个 web 元素,其中:
>>> elem
<selenium.webdriver.remote.webelement.WebElement object at 0x104327b50>
>>> elem.id
u'{3dfc8264-71bc-c948-882a-acd6a8b93ab5}'
>>> elem.is_displayed
<bound method WebElement.is_displayed of <selenium.webdriver.remote.webelement.WebElement object at 0x104327b50>>
现在,当我尝试提取信息以将信息放入此 iframe 时,出现以下错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Applications/Spyder.app/Contents/Resources/lib/python2.7/spyderlib/widgets/externalshell/sitecustomize.py", line 560, in debugfile
debugger.run("runfile(%r, args=%r, wdir=%r)" % (filename, args, wdir))
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/bdb.py", line 400, in run
exec cmd in globals, locals
File "<string>", line 1, in <module>
File "/Applications/Spyder.app/Contents/Resources/lib/python2.7/spyderlib/widgets/externalshell/sitecustomize.py", line 540, in runfile
execfile(filename, namespace)
File "/Users/jasonmellone/Documents/PythonProjects/nakedApts.py", line 88, in <module>
a = elem.find_element_by_xpath(".//*")
File "/Library/Python/2.7/site-packages/selenium-2.41.0-py2.7.egg/selenium/webdriver/remote/webelement.py", line 201, in find_element_by_xpath
return self.find_element(by=By.XPATH, value=xpath)
File "/Library/Python/2.7/site-packages/selenium-2.41.0-py2.7.egg/selenium/webdriver/remote/webelement.py", line 377, in find_element
{"using": by, "value": value})['value']
File "/Library/Python/2.7/site-packages/selenium-2.41.0-py2.7.egg/selenium/webdriver/remote/webelement.py", line 370, in _execute
return self._parent.execute(command, params)
File "/Library/Python/2.7/site-packages/selenium-2.41.0-py2.7.egg/selenium/webdriver/remote/webdriver.py", line 166, in execute
self.error_handler.check_response(response)
File "/Library/Python/2.7/site-packages/selenium-2.41.0-py2.7.egg/selenium/webdriver/remote/errorhandler.py", line 164, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: u'Unable to locate element: {"method":"xpath","selector":".//*"}' ; Stacktrace:
at FirefoxDriver.prototype.findElementInternal_ (file:///var/folders/8x/0msd5dd13l9453ff9739rj7w0000gn/T/tmpmH4ARe/extensions/fxdriver@googlecode.com/components/driver_component.js:8905)
at FirefoxDriver.prototype.findChildElement (file:///var/folders/8x/0msd5dd13l9453ff9739rj7w0000gn/T/tmpmH4ARe/extensions/fxdriver@googlecode.com/components/driver_component.js:8917)
at DelayedCommand.prototype.executeInternal_/h (file:///var/folders/8x/0msd5dd13l9453ff9739rj7w0000gn/T/tmpmH4ARe/extensions/fxdriver@googlecode.com/components/command_processor.js:10884)
at DelayedCommand.prototype.executeInternal_ (file:///var/folders/8x/0msd5dd13l9453ff9739rj7w0000gn/T/tmpmH4ARe/extensions/fxdriver@googlecode.com/components/command_processor.js:10889)
at DelayedCommand.prototype.execute/< (file:///var/folders/8x/0msd5dd13l9453ff9739rj7w0000gn/T/tmpmH4ARe/extensions/fxdriver@googlecode.com/components/command_processor.js:10831)
现在,我不是 selenium 开发人员,不知道这意味着什么。
当我运行以下代码时:
elem = Helper.getElementByxPath(mydriver,'//*[@aria-describedby="cke_18"]',"ABC");
mydriver.switch_to_frame(elem);
上面运行Helper.getElementByxPath 是:
def getElementByxPath(mydriver,xPath,valueString):
try:
a = mydriver.find_element_by_xpath(xPath);
a.send_keys(valueString);
return a;
except:
print "Unexpected error:", sys.exc_info()[0];
return 0;
a = elem.find_element_by_xpath(".//*")
给我以下内容:
>>> elem.id
u'{8be4819b-f828-534a-9eb2-5b791f42b99a}'
还有以下语句:
a = elem.find_element_by_xpath(".//*")
给我另一个巨大的错误。
让我感到沮丧的是:
- 我不需要从 iframe 中的嵌入式输入中获取信息,我只想发送密钥。
- 我很高兴只需要“Keys.TAB”,直到我到达正确的框和 Cursor.location.element.send_keys(伪代码)。
- 我只想在页面上键入文本,因为光标已经在正确的位置(我不能轻松地做到这一点吗?)
我的目标是只是在这里发送密钥,而不是做任何更深层次的事情,如果没有遇到上述问题,我似乎无法解决这个问题。
有没有办法解决这个问题?我很失败,希望有人能回答。
谢谢!
【问题讨论】:
-
stacktrace 唯一重要的部分是 `u'Unable to locate element: {"method":"xpath","selector":".//*"}' ;堆栈跟踪:`.
-
@PadraicCunningham 是的,但我该怎么办?
-
你是否使用过 firebug 或类似的东西来检查元素,看看你是否真的得到了你想要的正确 xpath?
-
@PadraicCunningham 当然,但你是什么意思? iframe 没有“名称”,但该元素在我访问它的方式上似乎是正确的。我有萤火虫,所以如果我在这里遗漏了什么,请告诉我。
-
看来您正在处理 CKEditor。
aria-describedby="cke_18"不适合使用。如果独一无二,我建议使用.//iframe[@title='Rich text editor, listing_description']之类的东西。 (但最好是添加唯一的类名)。供您参考,这里有一篇您可能会看的文章:Test WYSIWYG editors using Selenium WebDriver。基本上,你可以只调用编辑器的原生 JavaScript API 而不是处理 iframe。
标签: python python-2.7 iframe selenium