1.selenium的工作原理
selenium的工作原理涉及以下主要組件和步驟:
(1)WebDriver:這是selenium的核心組件,它是一個用于控制瀏覽器的API。WebDriver提供了許多方法,用于在瀏覽器中模擬用戶操作。不同的瀏覽器需要相應的WebDriver實現。
(2)瀏覽器驅動程序:每個瀏覽器需要一個特定的驅動程序,用于與WebDriver通信。例如,Chrome瀏覽器需要Chorme Driver,Firefox 瀏覽器需要Gecko Driver等。
(3)瀏覽器的實例化:在測試開始前,需要實例化一個特定瀏覽器的webdriver對象,這個webDriver對象可以控制一個真實的瀏覽器實例。
(4)模擬用戶操作:通過webdriver對象,你可以執行一系列模擬用戶操作,如點擊按鈕、輸入文本、提交表單、導航到不同頁面等。
(5)等待和定位元素:在自動化測試中,等待是一個重要的概念,你要等待頁面加載完成、元素可見、元素存在等條件滿足后再執行操作。同時,你需要定位要操作的html元素,比如按鈕、輸入框等。這可以通過各種定位策略如ID、類名、CSS選擇器、xpath等來實現。
(6)斷言和驗證:在自動化測試中,你通常會使用斷言來驗證預期結果是否與實際結果一致,這可幫助你確認web應用程序的行為是否符合預期。
(7)測試框架集成:selenium可以與不同的測試框架(如junit,testNG,pytest等)集成,以實現更結構化和可管理的測試。
2.selenium實現12306網站自動購票
?
from selenium import webdriver
import time
import jsonfrom selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWaitdef login():driver.get('https://kyfw.12306.cn/otn/resources/login.html')#最大化窗口driver.maximize_window()#獲取掃碼登錄cookies保存至本地,然后再從txt文件中讀取保存到本地的cookie進行登錄。該方法可能會在網站升級反爬操作后失效。driver.find_element(By.XPATH,'//*[@id="J-userName"]').send_keys('13709290316')driver.find_element(By.XPATH,'//*[@id="J-password"]').send_keys('428099ab')driver.find_element(By.XPATH,'//*[@id="J-login"]').click()#切換到彈出窗口driver.implicitly_wait(20)time.sleep(10)login_btn_loc=driver.find_element(By.XPATH,'//*[@id="modal"]/div[2]')driver.find_element(By.XPATH,'//*[@id="id_card"]').send_keys('0826')driver.find_element(By.XPATH,'//*[@id="verification_code"]').click()#手動輸入驗證碼time.sleep(30)driver.find_element(By.XPATH,'//*[@id="sureClick"]').click()# print("用戶登錄")time.sleep(2)# 登錄完成后就會跳轉新窗口n = driver.window_handlesprint('當前句柄', n)driver.switch_to.window(n[-1]) # driver切換至最新生產的頁面# '''1.cookie是用于保存用戶的類似賬號密碼等個人信息并存儲在瀏覽器中,是一種數字形式的訪問憑證。# 2.cookie有很多類型,因此在使用cookie時要先判定其數據類型'''cookie = driver.get_cookies()# print(cookie)# 獲取list的cookiesjsonCookies = json.dumps(cookie)# 轉換成字符串保存with open('ticket_cookies.txt', 'w')as f:f.write(jsonCookies)# print('cookies保存成功!')def buy():# 將鼠標懸停在車票頁簽上ele=driver.find_element(By.XPATH,'//*[@id="J-chepiao"]/a').click()#在driver瀏覽器上面,創建selenium的鼠標類操作對象# action=ActionChains(driver)
# 把鼠標移動到元素上#action.move_to_element(ele)driver.implicitly_wait(15)#點擊買票driver.find_element(By.XPATH,'//*[@id="megamenu-3"]/div[1]/ul/li[1]/a').click()driver.implicitly_wait(15)n = driver.window_handlesprint('當前句柄', n)driver.switch_to.window(n[-1]) # driver切換至最新生產的頁面time.sleep(3)# 選擇出發地driver.find_element(By.XPATH,'//*[@id="fromStationText"]').click()driver.find_element(By.XPATH,'//*[@id="ul_list1"]/li[29]').click()
# 選擇到達地driver.find_element(By.XPATH,'//*[@id="toStationText"]').click()driver.find_element(By.XPATH,'//*[@id="ul_list1"]/li[2]').click()
# 選擇日期,先清空文本框的值driver.find_element(By.XPATH,'//*[@id="train_date"]').clear()driver.find_element(By.XPATH,'//*[@id="train_date"]').send_keys('2023-08-09')driver.find_element(By.XPATH,'//*[@id="query_ticket"]').click()driver.implicitly_wait(15)driver.find_element(By.XPATH,'//*[@id="ticket_8d000G318206_08_23"]/td[13]/a').click()
#創建程序入口
if __name__=='__main__':driver = webdriver.Chrome()login()time.sleep(2)buy()?
3.開源庫管理
在python項目的project目錄下放置一個requirements.txt文件,在terminal中運行命令:
pip install -r requirements.txt
就會自動安裝文件中所有需要的庫。
# This is a mirror image of Tsinghua University
# -i https://pypi.tuna.tsinghua.edu.cn/simple# This is the specified version
# selenium==4.8.2
selenium
pytest