Selenium 是一個用於Web應用程式測試的工具。Selenium測試直接執行在瀏覽器中,就像真正的使用者在操作一樣。支援的瀏覽器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。這個工具的主要功能包括:測試與瀏覽器的相容性——測試你的應用程式看是否能夠很好得工作在不同瀏覽器和作業系統之上。測試系統功能——建立迴歸測試檢驗軟體功能和使用者需求。支援自動錄製動作和自動生成 .Net、Java、Perl等不同語言的測試指令碼。(摘自百科)
# 基本使用 from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.wait import WebDriverWait browser = webdriver.Chrome() try: browser.get(`https://www.baidu.com`) input = browser.find_element_by_id(`kw`) input.send_keys(`Python`) input.send_keys(Keys.ENTER) wait = WebDriverWait(browser, 10) wait.until(EC.presence_of_element_located((By.ID, `content_left`))) print(browser.current_url) print(browser.get_cookies()) print(browser.page_source) finally: browser.close() # 宣告瀏覽器物件 from selenium import webdriver browser = webdriver.Chrome() browser = webdriver.Firefox() browser = webdriver.Edge() browser = webdriver.PhantomJS() browser = webdriver.Safari() # 訪問頁面 from selenium import webdriver browser = webdriver.Chrome() browser.get(`https://www.taobao.com`) print(browser.page_source) browser.close() # 查詢元素 # 單個元素 from selenium import webdriver browser = webdriver.Chrome() browser.get(`https://www.taobao.com`) # 下面三個效果是一樣的 input_first = browser.find_element_by_id(`q`) input_second = browser.find_element_by_css_selector(`#q`) input_third = browser.find_element_by_xpath(`//*[@id="q"]`) print(input_first) print(input_second) print(input_third) browser.close() from selenium import webdriver from selenium.webdriver.common.by import By browser = webdriver.Chrome() browser.get(`https://www.taobao.com`) input_first = browser.find_element(By.ID, `q`) print(input_first) browser.close() # 多個元素 from selenium import webdriver browser = webdriver.Chrome() browser.get(`https://www.taobao.com`) lis = browser.find_elements_by_css_selector(`.service-bd li`) print(lis) browser.close() from selenium import webdriver from selenium.webdriver.common.by import By browser = webdriver.Chrome() browser.get(`https://www.taobao.com`) lis = browser.find_elements(By.CSS_SELECTOR, `.service-bd li`) print(lis) browser.close() # 元素互動操作 # 對獲取的元素呼叫互動方法 from selenium import webdriver import time browser = webdriver.Chrome() browser.get(`https://www.taobao.com`) input = browser.find_element_by_id(`q`) input.send_keys(`膝上型電腦`) time.sleep(5) input.clear() input.send_keys(`iPad`) button = browser.find_element_by_class_name(`btn-search`) # button.click() # 互動動作 # 將動作附加到動作鏈中序列執行 from selenium import webdriver from selenium.webdriver import ActionChains browser = webdriver.Chrome() url = "http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable" browser.get(url) browser.switch_to.frame(`iframeResult`) source = browser.find_element_by_css_selector(`#draggable`) target = browser.find_element_by_css_selector(`#droppable`) actions = ActionChains(browser) actions.drag_and_drop(source, target) actions.perform() # 執行JavaScript from selenium import webdriver browser = webdriver.Chrome() browser.get("https://www.zhihu.com/explore") browser.execute_script(`window.scrollTo(0, document.body.scrollHeight)`) browser.execute_script(`alert("To Bottom")`) # 獲取元素資訊 # 獲取屬性 from selenium import webdriver from selenium.webdriver import ActionChains browser = webdriver.Chrome() browser.get("https://www.zhihu.com/explore") logo = browser.find_element_by_id(`zh-top-link-logo`) print(logo) print(logo.get_attribute(`class`)) # 獲取文字值 from selenium import webdriver browser = webdriver.Chrome() browser.get(`https://www.zhihu.com/explore`) input = browser.find_element_by_class_name(`zu-top-add-question`) print(input.text) # 獲取ID、位置、標籤名、大小 from selenium import webdriver browser = webdriver.Chrome() browser.get(`https://www.zhihu.com/explore`) input = browser.find_element_by_class_name(`zu-top-add-question`) print(input.id) print(input.location) print(input.tag_name) print(input.size) # Frame import time from selenium import webdriver from selenium.common.exceptions import NoSuchElementException browser = webdriver.Chrome() browser.get(`http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable`) browser.switch_to.frame(`iframeResult`) source = browser.find_element_by_css_selector(`#draggable`) print(source) try: logo = browser.find_element_by_class_name(`logo`) except NoSuchElementException: print(`NO LOGO`) browser.switch_to.parent_frame() logo = browser.find_element_by_class_name(`logo`) print(logo) print(logo.text) # 等待 # 隱式等待 # 當使用了隱式等待執行測試的時候,如果WebDriver沒有在DOM中找到元素,將繼續等待,超出設定時間後丟擲找不到元素的異常, # 換句話說,當查詢元素或元素並沒有立即出現的時候,隱式等待將等待一段時間再查詢DOM,預設的時間是0 from selenium import webdriver browser = webdriver.Chrome() browser.implicitly_wait(10) browser.get(`https://www.zhihu.com/explore`) input = browser.find_element_by_class_name(`zu-top-add-question`) print(input) # 顯示等待 from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC browser = webdriver.Chrome() browser.get(`https://www.taobao.com/`) wait = WebDriverWait(browser, 10) input = wait.until(EC.presence_of_element_located((By.ID, `q`))) button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, `.btn-search`))) print(input, button) # 前進後退 import time from selenium import webdriver browser = webdriver.Chrome() browser.get(`https://www.baidu.com`) browser.get(`https://www.taobao.com`) browser.get(`https://www.python.org`) browser.back() time.sleep(5) browser.forward() browser.close() # Cookies from selenium import webdriver browser = webdriver.Chrome() browser.get(`https://www.zhihu.com/explore`) print(browser.get_cookies()) browser.add_cookie({`name`:`name`, `domain`:`www.zhihu.com`, `value`:`germey`}) print(browser.get_cookies()) browser.delete_all_cookies() print(browser.get_cookies()) # 選項卡管理 import time from selenium import webdriver browser = webdriver.Chrome() browser.get(`https://www.baidu.com`) browser.execute_script(`window.open()`) print(browser.window_handles) browser.switch_to_window(browser.window_handles[1]) browser.get(`https://www.taobao.com`) time.sleep(5) browser.switch_to_window(browser.window_handles[0]) browser.get(`https://python.org`) # 異常處理 from selenium import webdriver browser = webdriver.Chrome() browser.get(`https://www.baidu.com`) browser.find_element_by_id(`hello`) from selenium import webdriver from selenium.common.exceptions import TimeoutException, NoSuchElementException browser = webdriver.Chrome() try: browser.get(`https://www.baidu.com`) except TimeoutException: print(`Time Out`) try: browser.find_element_by_id(`hello`) except NoSuchElementException: print(`No Element`) finally: browser.close()