selenium如何操作頁面樹狀列表??舉個例子:我要怎么操作如下圖所示的樹狀結構列表?我要對這個樹狀結構列表做什么操作?
一、思路
1.根據driver.find_element_by_xpath(‘//*[@id="vehGroupTree_1_switch"]’).click() 選中頂級節點;如上圖的XX管理(id屬性為"vehGroupTree_1_switch"),獲取XX管理的id屬性;
2.觀察節點之間的規律;如上圖的id屬性的數字部分逐級+1
3.獲取樹狀結構列表所有顯示內容?問題:在獲取樹狀結構列表內容的時候,節點沒有展開是否可以獲取得到?
4.獲取樹狀結構列表分組數目,包括子集?
5.遍歷展開所有節點?
二、操作
1.遍歷點擊“+”按鈕,展開樹狀結構列表的子集
a = 'vehGroupTree_1_switch' # 頂級節點的id屬性 b = a.split('_') # 拆分id屬性 c = [] # 存放id屬性的數字部分列表 e = [] # 存放生成的id屬性 # 生成id屬性的數字部分
for x in range(2,21): # 從2開始遍歷,避免點擊到頂級節點,使后續節點獲取不到屬性,導致報錯;21為樹狀結構列表內容總數n+1(總數為n) c.append(x) print(c)
# 組合id屬性 for i in c: g = b[0] + '_' + str(i) + '_' + b[2] # 組合 : e.append(g) print(g) print(e) # 遍歷點擊“+”按鈕,展開樹狀結構列表的子集 for k in e: print(k) print("//*[@id='" + k + "']") d.find_element_by_xpath("//*[@id='" + k + "']").click()
2.獲取樹狀結構列表分組數目,包括子集,並獲取列表的所有內容
注意:如果沒有所有子集展示出來,是獲取不到子集內容的(統計包括子集在內的總數)
a = d.find_elements_by_xpath('//*[@id="vehGroupTree_1"]') # 定位到整個樹狀結構列表元素 b = [] for p in a: c = p.text b.append(a) print(c, p.get_attribute("href")) # 打印遍歷標簽出來的內容 print(b) print(b[0].split('\n')) # 以\分隔符拆分 print(len(b[0].split('\n'))) # 統計
3、貼上完整代碼
from selenium import webdriver import time d = webdriver.Chrome() d.maximize_window() d.get(url) d.find_element_by_xpath('//*[@id="userName"]').send_keys(username) d.find_element_by_xpath('//*[@id="userPwd"]').send_keys(passworld) d.find_element_by_xpath('//*[@id="login"]').click() time.sleep(2) d.find_element_by_xpath('//*[@id="menu_ul"]/li[5]/a').click() d.switch_to_frame('mainframe2') d.find_element_by_xpath('//*[@id="nav-accordion"]/li[2]/a').click() d.switch_to_frame('mainframe') d.switch_to_frame('vehIframe') a = 'vehGroupTree_1_switch' b = a.split('_') c = [] e = [] for x in range(2,21): c.append(x) #print(c) for i in c: g = b[0] + '_' + str(i) + '_' + b[2] e.append(g) #print(g) #print(e) # 遍歷點擊展示子集節點 for k in e: #print(k) #print("//*[@id='" + k + "']") d.find_element_by_xpath("//*[@id='" + k + "']").click() he = d.find_elements_by_xpath('//*[@id="vehGroupTree_1"]') lists = [] for p in he: a = p.text lists.append(a) print(a, p.get_attribute("classname")) # 打印遍歷標簽出來的內容 print(lists) print(lists[0].split('\n')) print(len(lists[0].split('\n')))