如何解决如何使用Selenium Python将文本发送到<!DOCTYPE html>中的iframe?
我正在尝试选择一个<!DOCTYPE html>
这是HTML:
我几乎尝试了所有事情,但最终我一无所获。 这是我的代码
desc =WebDriverWait(browser,30).until(EC.visibility_of_element_located((By.XPATH,'//*[@id="tinymce"]')))
desc.clear()
desc.send_keys("anynaynanya")
如果我使用iframe的xpath,则会收到该错误:
Traceback (most recent call last):
File "C:\Users\Dln\Desktop\tstsd.py",line 22,in <module>
desc.clear()
File "C:\Users\Dln\AppData\Local\Programs\Python\Python38-32\lib\site-packages\selenium\webdriver\remote\webelement.py",line 95,in clear
self._execute(Command.CLEAR_ELEMENT)
File "C:\Users\Dln\AppData\Local\Programs\Python\Python38-32\lib\site-packages\selenium\webdriver\remote\webelement.py",line 633,in _execute
return self._parent.execute(command,params)
File "C:\Users\Dln\AppData\Local\Programs\Python\Python38-32\lib\site-packages\selenium\webdriver\remote\webdriver.py",line 321,in execute
self.error_handler.check_response(response)
File "C:\Users\Dln\AppData\Local\Programs\Python\Python38-32\lib\site-packages\selenium\webdriver\remote\errorhandler.py",line 242,in check_response
raise exception_class(message,screen,stacktrace)
selenium.common.exceptions.InvalidElementStateException: Message: invalid element state
(Session info: chrome=85.0.4183.83)
解决方法
尝试切换到第一帧
要切换到具有框架名称的框架
driver.switch_to.frame("framename")
查看此链接https://www.tutorialspoint.com/how-to-handle-frames-in-selenium-with-python
,要访问任何框架,您首先需要切换到该框架。只是为了确保网页上有框架,您可以按标签名称iframe
driver.find_elements_by_tag_name("iframe")
将列出可用的相框。这只是为了更确定框架的存在。 要在内部发送一些文本,您需要切换到框架,这可以通过提供索引以及框架名称来完成。
driver.switch_to.frame()
注:索引号从0开始
, <p>
元素位于<iframe>
中,因此您必须:
-
诱导WebDriverWait使所需的帧可用并切换到。
-
引出WebDriverWait以使所需的元素可点击。
-
您可以使用以下任一Locator Strategies:
-
使用
CSS_SELECTOR
:driver.get('https://www.t-online.de/themen/e-mail') WebDriverWait(driver,20).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe#textarea-WYSIWYG_ifr"))) WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.CSS_SELECTOR,"body.mce-content-body#tinymce > p"))).send_keys("anynaynanya")
-
使用
XPATH
:driver.get('https://www.t-online.de/themen/e-mail') WebDriverWait(driver,20).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@id='textarea-WYSIWYG_ifr']"))) WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.XPATH,"//body[@id='tinymce' and @class='mce-content-body']/p"))).send_keys("anynaynanya")
-
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
参考
您可以在以下位置找到一些相关的讨论
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。