如何在Python3中使用Selenium WebDriver向可编辑<p>标签写入内容?
解决Selenium向contenteditable的
标签写入内容的问题
嘿,我来帮你搞定这个报错问题!你遇到的InvalidSelectorException是因为用错了元素定位方法,咱们一步步来修正:
错误原因分析
你用find_element_by_tag_name()的时候,传入了混合属性条件的字符串——这个方法只接受单纯的HTML标签名(比如直接写"p"),不能加上['contenteditable':'True'这种属性过滤条件,浏览器识别不了这个无效的选择器,自然就抛出错误啦。
正确的解决方法
要定位带contenteditable="true"属性的<p>标签,得用支持属性过滤的选择器(比如CSS选择器或XPath),再用正确的方法写入内容:
方法一:CSS选择器定位 + send_keys写入
这是最常用的方案,用CSS选择器精准定位元素后,通过send_keys()输入文本:
from selenium import webdriver browser = webdriver.Chrome() browser.get(url_link) # 用CSS选择器定位contenteditable为true的p标签 target_element = browser.find_element_by_css_selector("p[contenteditable='true']") # 写入内容 target_element.send_keys("hello")
方法二:send_keys无效时用JavaScript注入
有时候send_keys()对contenteditable元素可能不生效,这时候可以通过执行JavaScript直接设置元素文本:
from selenium import webdriver browser = webdriver.Chrome() browser.get(url_link) target_element = browser.find_element_by_css_selector("p[contenteditable='true']") # 用JavaScript设置元素的innerText(也可以用textContent或innerHTML) browser.execute_script("arguments[0].innerText = 'hello';", target_element)
备选定位方式:XPath
如果你更习惯用XPath,也可以这样写:
target_element = browser.find_element_by_xpath("//p[@contenteditable='true']")
注意:HTML里的属性值是小写的"true",选择器里尽量保持一致,避免大小写不匹配的问题哦。
内容的提问来源于stack exchange,提问作者Bhargav Desai
相关产品推荐
相关产品推荐

