做自动化时,在往输入框中send_keys前往往需要先清空一下这个输入框里的内容,避免输入框原本有内容或默认值,导致最终输入的结果不是预期的内容。
清空内容我们一般会用clear()方法
import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://www.baidu.com')
driver.find_element_by_id('kw').send_keys('输入的内容')
time.sleep(2)
driver.find_element_by_id('kw').clear()
但用久了你就会发现clear()并非对所有的输入框都好用,即使它是一个input元素。
产生这个问题的原因有的说是DOM里有镜像节点,清空了输入框中的内容,但是镜像节点里还有数据,所以仍会显示,类似这样:
也有的说是因为clear()本身是只对form中的表单元素有效。
这里不探究到底为什么clear()会无效,只写几种能达到clear效果的方法。
方法一:模拟键盘的清空操作
全选+删除是个比较好的选择
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()
driver.get('https://www.baidu.com')
driver.find_element_by_id('kw').send_keys('输入的内容')
time.sleep(2)
driver.find_element_by_id('kw').send_keys(Keys.CONTROL, 'a')
driver.find_element_by_id('kw').send_keys(Keys.DELETE)
也可以用双击+删除,但是要注意双击也是为了能选中内容,但有时候双击不能达到全选的效果
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Chrome()
driver.get('https://www.baidu.com')
element = driver.find_element_by_id('kw')
element.send_keys('输入的内容')
time.sleep(2)
ActionChains(driver).double_click(element).perform()
element.send_keys(Keys.DELETE)
方式二:使用JS进行清空操作
import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://www.baidu.com')
element = driver.find_element_by_id('kw')
element.send_keys('输入的内容')
time.sleep(2)
driver.execute_script('arguments[0].value="";', element)
使用JS直接改变元素属性值也能达到效果,但是适用性不如全选+删除。如果后面还要send_keys,直接只全选即可。
版权归原作者 joker_zsl 所有, 如有侵权,请联系我们删除。