例子是使用了selenium3.7.0 , python 3.6.2 , 火狐57版本css
如下是例子的源碼:html
<!DOCTYPE html><!-- <html> --> <!-- <body> --> <!-- <div class="back-f5f5ff padding-top-20 padding-bottom-60"> --> <!-- <div class="login-right login-style" id="login-container"> --> <!-- <p class="font18">登陸輸入框</p> --> <!-- <form id="login-form-confirm" style="display:none;"> --> <!-- <input type="hidden" name="lt" > --> <!-- <div class="form-group"> --> <!-- <div class="input-group"> --> <!-- <div class="input-group-addon"><i class="fa fa-user font18 width-20"></i></div> --> <!-- <input type="text" readonly="readonly" autocomplete="off" name="username" id="username" class="form-control input-lg required" value="" placeholder="請輸入您的帳號"> --> <!-- </div> --> <!-- </div> --> <!-- <div class="form-group"> --> <!-- <div class="input-group"> --> <!-- <div class="input-group-addon"><i class="fa fa-lock font18 width-20"></i></div> --> <!-- <input type="hidden" readonly="readonly" data-security="false" autocomplete="off" name="password" id="password" class="form-control input-lg required" value="" placeholder="請輸入登陸密碼"> --> <!-- <input type="password" readonly="readonly" data-security="false" autocomplete="off" name="passwordTemp" id="passwordTemp" class="form-control input-lg " value="********"> --> <!-- </div> --> <!-- </div> --> <!-- </form> --> <!-- <form id="login-form" > --> <!-- <input type="hidden" name="lt" > --> <!-- <div class="form-group"> --> <!-- <div class="input-group"> --> <!-- <div class="input-group-addon"><i class="fa fa-user font18 width-20"></i></div> --> <!-- <input type="text" autocomplete="off" name="username" id="username" class="form-control input-lg required" value="" placeholder="請輸入您的帳號"> --> <!-- </div> --> <!-- </div> --> <!-- <div class="form-group"> --> <!-- <div class="input-group"> --> <!-- <div class="input-group-addon"><i class="fa fa-lock font18 width-20"></i></div> --> <!-- <input type="password" autocomplete="off" name="password" data-security="false" id="password" class="form-control input-lg required" value="" placeholder="請輸入登陸密碼"> --> <!-- </div> --> <!-- </div> --> <!-- </form> --> <!-- </div> --> <!-- </div> --> <!-- </body> --> <!-- </html> -->
當咱們使用browser.find_element_by_css_selector()指令去找到元素體時,並進行輸入操做時出現錯誤並提示說元素不可見python
selenium.common.exceptions.ElementNotInteractableException: Message: Element is not visibleweb
from selenium import webdriver class demo: def __init__(self): import os # 實現全局變量的引用 firefoxBin = os.path.abspath(r"E:\Program Files\Mozilla Firefox\firefox.exe") os.environ["webdriver.firefox.bin"] = firefoxBin # 代碼加載火狐驅動 firefoxgeckobdriver = os.path.abspath(r"E:\drivers\Drivers\geckodriver64.exe") self.browser = webdriver.Firefox(executable_path=firefoxgeckobdriver) self.browser.maximize_window() self.browser.implicitly_wait(10) self.browser.get("file:///C:/Users/70486/Desktop/demo.html") if __name__ == '__main__': case = demo() user = case.browser.find_element_by_css_selector('#username') print(user) user.send_keys('username')
通常出現這類緣由的狀況有:(我的思路而已)ui
1.元素在from中。須要咱們進入from以後在進行操做spa
2.元素尚未加載出來就進行操做了firefox
3.元素不在當前頁面須要上拉或者下拉才能出現日誌
發現此次錯誤並不屬於這三類狀況。code
後面發現該代碼有2對帳號密碼的輸入框,其中前面那對被隱藏了(style="display:none)。沒法從界面上看到,orm
但實際是存在頁面的。
遇到不可見的元素時咱們能夠經過JavaScript來改變style屬性讓其顯示出來。
若是這麼作了頁面就出現了兩對輸入框了,不符合要求。
換了一種尋找的方式來找到下面那對顯示的輸入框,經過browser.find_elements_by_css_selector()
if __name__ == '__main__': case = demo() user = case.browser.find_elements_by_css_selector('#username') print(len(user)) for size in user: print(size)
打印的日誌:
找到了那咱們就經過user[1]來對齊輸入。。
user[0]表示第一個,user[1]表示第二個。從0開始計算
if __name__ == '__main__': case = demo() user = case.browser.find_elements_by_css_selector('#username') user[1].send_keys('username')
運行的效果
密碼輸入框也是經過這個思路進行輸入的。
多實踐多操做。
id和class重名的會不少。尋找方式也不少這裏只是提供一個思路。