web自動化,准備模擬一個修改名稱的操作,想的是定位都輸入框元素,然后使用clear()方法清空輸入框內容,再重新輸入一些內容
結果實際上發現並沒有清空輸入框內容,而是直接在輸入框后面追加了(這里就可以確定元素肯定是定位到了的)
clear()方法為什么會失效不得而知,在網上搜索了一大圈也沒看到有人解釋說為什么會沒起作用(好想知道為什么不起作用……)
解決辦法:
總得來說有三個解決思路
一:雙擊輸入框,然后重新輸入內容(不靠譜)
需要導入 from selenium.webdriver import ActionChains
二:通過鍵盤全選,即模擬發起ctrl+a,然后重新輸入內容(簡單,推薦使用)
需要導入 from selenium.webdriver.common.keys import Keys
三:通過萬能的js直接定位到元素然后將元素的value值清空(需要了解一定的js語法,如果要做好web自動化,js多少也需要掌握點)
下面是以上三種方法的代碼實現
ele = driver.find_element_by_xpath('//*[@id="data-assets-modules"]/div[3]/div/div[2]/form/div/div/div/input') # 方法一:雙擊輸入框,再輸入新的內容 ActionChains(driver).double_click(ele).perform() ele.send_keys('嘗試雙擊修改') # 方法二:通過鍵盤全選,然后直接輸入新的內容,就不用clear了 ele.send_keys(Keys.CONTROL, 'a') ele.send_keys('通過鍵盤全選達到清空效果,再輸入') # 方法三:萬能的js # 這種execute_script()的用法還需要學習 driver.execute_script("arguments[0].value = '';", ele) price = 249900 driver.execute_script('arguments[0].value="{}";'.format(price), ele) # 也可以通過css選擇器選取元素再把value清空 driver.execute_script('document.querySelector("#data-assets-modules > div:nth-child(3) > div > div.el-dialog__body > form > div > div > div > input").value=""') ele.send_keys('通過js清空輸入框') elem = driver.find_element(By.XPATH, "//*[@id='negotiatedValue']")