前言
selenium進行自動化的過程中,常出現click()點擊事件無效問題。當click()點擊事件無效時,可使用以下方法解決。
首先-確定該元素是否可見
查找元素並輸出
ele = driver.find_element_by_id("") print("目標元素:",ele)
運行查找代碼,若報錯找不到該元素,則元素不可見;若成功輸出元素,則元素可見。
元素不可見-解決點擊無效問題
由於元素在頁面不可見,故操作元素會報錯。自動化操作web網站和人工進行操作步驟是一樣的,當頁面看不到元素是無法操作的,需先露出元素,再操作元素。
露出元素:可通過鼠標懸停、滑動頁面、點擊展示目標彈窗等操作實現,據具體情況而定。
例:
京東首頁點擊我的京東-待處理訂單,直接查找待處理訂單元素,如下:
直接查找報錯“no such element...”,由於該元素在頁面上是隱藏的,故直接定位會報錯。需先鼠標懸停在“我的京東”,展開子菜單彈窗,使得“待處理訂單”可見后方可點擊。
1 # selenium常見問題 2 from selenium.webdriver.common.action_chains import ActionChains 3 from selenium import webdriver 4 from time import sleep 5 6 driver = webdriver.Chrome() # 啟動chrome瀏覽器 7 driver.get('https://www.jd.com/') # 打開京東 8 sleep(3) 9 10 tag_element = driver.find_element_by_xpath('//*[text()="我的京東"]') # 菜單-我的京東 11 ActionChains(driver).move_to_element(tag_element).perform() # 鼠標懸浮在-我的京東,展開子菜單 12 sleep(3) 13 driver.find_element_by_link_text("待處理訂單").click() # 點擊子菜單-待處理訂單 14 sleep(3)
運行代碼,成功點擊子菜單-待處理訂單
元素可見-解決點擊無效問題
元素當前頁面可見,click()點擊無效可通過執行js代碼實現。
執行js語句代碼如下:
driver.execute_scrtip(js) # js即js語句
js查找元素常用語法如下:
document.getElementById("xxx") # id獲取元素,xxx表示id值 document.getElementByClass("xxx") # class獲取元素,xxx表示class值 document.getElementByName("xxx") #name獲取元素,xxx表示name值 document.getElementByTagName("xxx") # 獲取tag標簽,xxx表示tag值 document.querySelectorAll("xxx") # css獲取元素,xxx表示css語法 document.getElementById("xxx").click() # 點擊元素,元素后直接click()即可
例:
js ='document.getElementById("password").click()' # js點擊元素 driver.execute_scrtip(js) # 執行js語句