<textarea style="position: absolute; padding: 0px; width: 1px; height: 1em; outline: currentcolor none medium;" autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" wrap="off"></textarea>
这是我尝试使用XPath访问它的方式:
driver.find_element_by_xpath("/html/body/div/div[1]/textarea").send_keys("Some text here")
在页面上找不到该元素的错误提示
selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: /html/body/div/div[1]/textarea
我也使用 css_selector 来访问元素,但是仍然存在相同的错误。 如何正确访问弹出窗口?
更多HTML代码:https://pastebin.com/6jdix2Cm
答案 0 :(得分:2)
根据您的回复,该 textarea 位于 iframe 中。
首先,您必须切换到框架,然后才能与此文本区域进行交互。
要切换到iframe,您可以使用以下代码:
driver.switch_to.frame(driver.find_element_by_xpath("//iframe[@src='https://qsm.qoo10.sg/gmkt.inc.gsm.web/common/scripts/module/tiny_mce_4.5.7/source/plugins/codemirror/source.html']"))
然后您就可以与 textarea 进行交互:
driver.find_element_by_css_selector("textarea[spellcheck='false'][wrap='off'][style$='outline: currentcolor none medium;']").send_keys("Some text here")
完成特定的iframe后,最好切换到默认内容。为此,您将需要以下代码:
driver.switch_to.default_content()
希望这会有所帮助。
答案 1 :(得分:0)
根据您共享的 HTML ,因为<textarea>
位于<iframe>
之内,因此您需要诱使 WebDriverWait 切换到所需的 frame ,然后再次发送 WebDriverWait ,以使所需的元素可点击,然后再发送字符序列,您可以使用以下解决方案:>
WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[contains(@src,'gmkt.inc.gsm.web/common/scripts/module/tiny_mce_4.5.7/source/plugins/codemirror/source.html')]")))
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.TAG_NAME, "textarea"))).send_keys("Andrew")
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC