代碼
from selenium import webdriverdriver = webdriver.Chrome()driver.get("http://124.223.31.21:9097/#/")driver.find_element("id", "formLabelAlign.username").send_keys("20154084")driver.find_element("id", "formLabelAlign.password").send_keys("123456")driver.find_element("css selector", ".submit>button").click()
你會(huì)發(fā)現(xiàn)無(wú)法登錄,道理很簡(jiǎn)單
你輸入的密碼追加過(guò)去了,send_keys如果之前有內(nèi)容,是會(huì)保留的,追加你輸入的內(nèi)容。
(資料圖片僅供參考)
你可能會(huì)這樣處理,在密碼元素上先清空之前的內(nèi)容(clear),然后再去輸入
driver.find_element("id", "formLabelAlign.username").send_keys("20154084")driver.find_element("id", "formLabelAlign.password").clear()driver.find_element("id", "formLabelAlign.password").send_keys("123456")
一個(gè)奇怪的現(xiàn)象發(fā)生了,你是清空了之前的內(nèi)容,但你輸入的是12345,6沒(méi)了!
屢試不爽但如果輸入12345678,或者h(yuǎn)elloworld,缺又是可以的,我反正是解釋不了當(dāng)然這不是我們的重點(diǎn)。實(shí)際工作中我也遇到過(guò),有同學(xué)也遇到過(guò)類似的情況我們可以用其他等價(jià)的手段來(lái)替代這個(gè)清空后輸入
的行為解決方法一:鍵盤操作在密碼上按CTRL+A,再輸入
示例代碼
driver.find_element("id", "formLabelAlign.password").send_keys(Keys.CONTROL,"A")driver.find_element("id", "formLabelAlign.password").send_keys("123456")driver.find_element("css selector", ".submit>button").click()
從運(yùn)行的效果看,是全選了,但依然輸入的是12345(至此我非常懷疑是send_keys的問(wèn)題)
解決方法二:鼠標(biāo)操作在元素上雙擊(相當(dāng)于是全選的操作)
然后再輸入
示例代碼
ele_password = driver.find_element("id", "formLabelAlign.password")ActionChains(driver).double_click(ele_password).send_keys("123456").perform()
效果OK
這樣也是ok的
ele_password = driver.find_element("id", "formLabelAlign.password")ActionChains(driver).double_click(ele_password).send_keys_to_element(ele_password,"123456").perform()
對(duì)于這個(gè)case,既然懷疑是send_keys的問(wèn)題,那我們完全可以用其他方式來(lái)輸入內(nèi)容
比如這樣
ele_password = driver.find_element("id", "formLabelAlign.password")ele_password.clear()ActionChains(driver).send_keys_to_element(ele_password,"123456").perform()
即保留了clear,但用其他方式來(lái)輸入內(nèi)容
解決方法三:第三方庫(kù)來(lái)輸入可以鍵盤輸入的庫(kù)就多了
比如pyautogui
示例代碼
from selenium import webdriverdriver = webdriver.Chrome()driver.get("http://124.223.31.21:9097/#/")driver.find_element("id", "formLabelAlign.username").send_keys("20154084")ele_password = driver.find_element("id", "formLabelAlign.password")ele_password.clear()import pyautoguipyautogui.typewrite("123456")driver.find_element("css selector", ".submit>button").click()
的確搞定了
但有點(diǎn)奇怪的是
我加了sleep,并沒(méi)有看到在密碼框中有輸入123456
畫蛇添足
ele_password.clear()ele_password.click()import pyautoguipyautogui.typewrite("123456")
click的效果是有的,但是,又只輸入了12345
至此有點(diǎn)懵,不是send_keys的原因?還是說(shuō)send_keys跟typewrite有一樣的問(wèn)題?
解決方法四:js操作js操作就比較絲滑,因?yàn)樗梢詫?duì)一個(gè)元素的value進(jìn)行賦值,不存在什么clear
示例代碼
from selenium import webdriverdriver = webdriver.Chrome()driver.get("http://124.223.31.21:9097/#/")driver.find_element("id", "formLabelAlign.username").send_keys("20154084")js = "document.querySelector("[placeholder=請(qǐng)輸入密碼]").value="123456""driver.execute_script(js)driver.find_element("css selector", ".submit>button").click()
說(shuō)在最后方法其實(shí)很多,你要思考的是如何模擬這個(gè)操作上面的未必能解決你的問(wèn)題,你需要根據(jù)實(shí)際情況去探索 關(guān)鍵詞: