1、有select標簽的下拉框處理
1.1、導入的模塊/類(Select)
from selenium.webdriver.support.select import Select # 或 from selenium.webdriver.support.ui import Select # 兩者功能一樣,選其一即可,沒有本質的區別
1.2、Select中有三種選擇下拉框選擇的方法
通過索引選擇(從0開始):select_by_index(索引)
通過屬性的值(option標簽的屬性的值)選擇:select_by_value(值)
通過文本選擇(下拉框的選項的文本):select_by_visible_text(文本)
1.3、Select查看各個選項
options:查看所有選項(包括已選和未選,即查看下拉框的所有選項)
is_multiple:查看下拉框是否已經多選
all_select_options:查看所有已選選項
first_select_option:查看第一個已選(若有多個已選,則為第一個已選選項;單選則只有唯一一個)
代碼示例:
# 導入需要的模塊Select()類是用來管理下拉框的 from selenium import webdriver from selenium.webdriver.support.select import Select import time # 創建瀏覽器對象 driver = webdriver.Firefox() driver.maximize_window() # 訪問貼吧的高級搜素 driver.get('https://tieba.baidu.com/f/search/adv') # 定位到下拉框元素 el_select = driver.find_element_by_name('rn') # 創建一個下拉框對象 xialakuang = Select(el_select) # 三種方法選擇下拉框選項 # 第一、通過選項的索引來選定選項(索引從0開始算) xialakuang.select_by_index(0) time.sleep(1) xialakuang.select_by_index(2) time.sleep(1) xialakuang.select_by_index(1) time.sleep(1) # 第二種方法:通過option標簽的屬性值選擇 xialakuang.select_by_value('20') time.sleep(1) xialakuang.select_by_value('10') time.sleep(1) xialakuang.select_by_value('30') time.sleep(1) # 第三種:通過文本選擇(下拉框的值) xialakuang.select_by_visible_text('每頁顯示20條') time.sleep(1) xialakuang.select_by_visible_text('每頁顯示10條') time.sleep(1) xialakuang.select_by_visible_text('每頁顯示30條') time.sleep(1) # 打印選擇的文本 # 查看第一個已選(若有多個已選則打印第一個,只有一個已選則打印一個) print(xialakuang.first_selected_option.text) # 打印所有已選的選項的文本 yixuan = xialakuang.all_selected_options for i in yixuan: print('已選',i.text) # 打印是否是多選 print(xialakuang.is_multiple) # 打印所有選項(包括已選和未選的) m_list = xialakuang.options for a in m_list: print('選項',a.text) # 關閉瀏覽器 driver.quit()
1.4、取消選擇
deselect_by_index(index)
deselect_by_value(value)
deselect_by_visible_text(text)
deselect_all()
前面三種分別對應前面的選擇選項的取消;deselect_all()方法用於多選下拉框,全部取消所有選擇
2、沒有select標簽的下拉框處理
若下拉框無select標簽,意味着不能使用Select模塊處理下拉框;
2.1、此時可以用到elements定位方法獲取下拉框元素組,然后再從元素組里一個一個用索引方法選擇,然后點擊選擇,如下代碼:
from selenium import webdriver # 導入Select類,用於處理下拉框(標簽名必須是select否則此模塊無法使用) from selenium.webdriver.support.select import Select import time # 創建一個瀏覽器對象 driver = webdriver.Firefox() # 訪問百度 url = 'http://www.baidu.com' driver.get(url) # 定位到設置按鈕並執行點擊操作 s = driver.find_element_by_id('s-usersetting-top') s.click() # 定位到高級搜素並點擊 sous = driver.find_element_by_css_selector('.s-user-setting-pfmenu > a:nth-child(2)') sous.click() # 獲取下拉框下拉按鈕 xiala = driver.find_element_by_css_selector('.adv-gpc-select > div:nth-child(1) > span:nth-child(1)') xiala.click() time.sleep(3) # 獲取下拉框選項結果集 sous_list = driver.find_elements_by_css_selector('.adv-gpc-select > div:nth-child(2) > div:nth-child(2) > p') print(sous_list) time.sleep(3) # 選擇一個選項、 sous_list[3].click() time.sleep(1) xiala.click() sous_list[1].click() time.sleep(1) xiala.click() sous_list[2].click() time.sleep(1) xiala.click() sous_list[4].click() time.sleep(1) xiala.click() sous_list[0].click() time.sleep(3) driver.quit()
2.2、還可以直接使用xpath定位直接定位到需要選擇的元素,然后點擊,與2.1內容相似
