設定瀏覽器驅動後,可以通過簡單的2行程式碼就可以驅動瀏覽器(設定這裡不加贅述)
from selenium import webdriver driver = webdriver.Chrome() driver.get("https://www.baidu.com")
driver.back()#後退 driver.forward()#前進 driver.refresh()#重新整理
driver.maximize_window()#瀏覽器最大化視窗 driver.minimize_window()#瀏覽器最小化視窗 driver.close()#關閉瀏覽器
driver.set_window_position(座標X,座標Y) #移動瀏覽器到座標位置 driver.set_window_size(寬度畫素,高度畫素)#講瀏覽器視窗設定指定大小 driver.set_window_rect(座標X,座標Y,寬度畫素,高度畫素)#將瀏覽器視窗移動到指定位置,同時設定視窗大小
print(driver.title) #百度一下,你就知道 print(driver.current_url) #https://www.baidu.com/
#獲取位置物件 driver.get_window_position() #獲取大小物件 driver.get_window_size() #獲取位置和大小物件 driver.get_window_rect()
#基本查詢元素 from selenium.webdriver.common.by import By driver.find_element(By.ID,"kw").send_keys("") driver.find_element(By.NAME,"wd").send_keys("") driver.find_element(By.LINK_TEXT,"新聞").click()
通常用於單擊按鈕(<button/>、<input type="reset"/>、<input type="submit">)、連結(<a/>)、單選框(<input type="radio"/>)、核取方塊(<input type="checkbox"/>)等元素,但實際上對於頁面上任何可見的元素,都可用click函數單擊
該函數一般用於輸入框元素(<input type="text"/><input type="password"/><textarea/>)或檔案上傳元素(<input type="file"/>),但理論上可以對任何可輸入元素進行操作。
和send_keys函數類似,clear函數多用於輸入框元素。例如在百度搜尋頁面,我們可以先在百度搜尋文字方塊中填入關鍵字,然後搜尋。如果之後要再搜尋其他關鍵字,就需要執行clear函數,先清空文字再輸入關鍵字
下拉框分為單選下拉框(<Select/>)和多選列表框(<Select multiple= "multiple"/>)
from selenium.webdriver.support.select import Select
sel=Select(driver.find_element(By.NAME,"cat_id")) sel.select_by_value("頁面元素value數位") sel.select_by_index("使用下標") sel.select_by_visible_text("根據文字選擇")
sel.deselect_all()#取消所有選
from selenium.webdriver.common.by import By baiduNewsLink = driver.find_element(By.XPATH,"//*[text()='新聞']") print(baiduNewsLink.text)#文字值 print(baiduNewsLink.tag_name)#標籤型別 print(baiduNewsLink.is_selected())#元素是否選中 print(baiduNewsLink.is_enabled())#元素是否可以編輯 print(baiduNewsLink.is_displayed())#元素是否已經顯示
彈窗一共有三類:alert(只有確定),confirm(有確定又取消),prompt(有確定有取消還可以輸入值) alert不是一個方法是一個屬性
ale=driver.switch_to.alert ale.accept()#點選確定 ale.dismiss()#點選取消
print(driver.current_window_handle)#列印當前正在操作的瀏覽器控制程式碼 print(driver.window_handles)#列印範例下的所有控制程式碼 driver.switch_to.window(driver.window_handles[0])#切換到第一個視窗控制程式碼
通過函數設定等待的超時時間
driver.set_page_load_timeout(最長等待秒數)
改函數是全域性設定,在整個範例週期都會生效
強制等待很簡單,直接使用PYthon的time函數即可
如下表示3秒延遲
import time time.sleep(3)
缺點:處理起來毫無彈性
這是Selenium最初版本就支援的等待方式。它的作用是在執行find_element...這類函數時增加一個寬限時間,它決定了查詢元素時的最長等待時間
driver.implicitly_wait(等待秒數)
缺點:
元素級等待機制的最佳實踐方式是顯式等待,它是一種相當完美的等待機制。只需要指定條件判斷函數,Selenium會每隔一定時間檢測該條件是否成立。如果成立,就立刻執行下一步;否則,一直等待,直到超過最大等待時間,丟擲超時異常
WebDriverWait(範例,超時秒數,檢測時間間隔預設0.5秒)
from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.common.by import By #這種場景下更適合使用Lambda表示式定義匿名函數 # WebDriverWait(driver,10).until(條件判斷函數:等待到條件判斷函數返回True) # WebDriverWait(driver,10).until_not(條件判斷函數:等待到條件判斷函數返回False) WebDriverWait(driver,10).until(lambda p: p.find_element(By.XPATH,"//*[text()='新聞']").is_displayed)
from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.common.by import By driver = webdriver.Chrome() driver.get("https://www.baidu.com") ActionChains(driver).click(driver.find_element(By.XPATH,"//*[text()='新聞']")).perform()
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.action_chains import ActionChains driver = webdriver.Chrome() driver.get("https://www.baidu.com") # move_to_element會將滑鼠指標放置在"設定"連結上,實現懸停效果 ActionChains(driver)\ .move_to_element( driver.find_element(By.XPATH, "//span[text()='設定']"))\ .pause(3)\ .perform() ActionChains(driver)\ .click(driver.find_element(By.LINK_TEXT, "搜尋設定"))\ .pause(3)\ .perform() ActionChains(driver)\ .click(driver.find_element(By.ID, "s1_2"))\ .click(driver.find_element(By.ID, "SL_2"))\ .click(driver.find_element(By.ID, "sh_1"))\ .click(driver.find_element(By.LINK_TEXT, "儲存設定"))\ .pause(3)\ .perform()
注:
操作鏈中涉及的所有WebElement元素在操作鏈執行時必須同時存在,且處於可操作狀態,否則無法執行操作鏈。也就是說,在同一個操作鏈中,無法做到先操作某個元素,然後另一個新元素才顯示,接著再操作這個新元素。
driver.save_screenshot(截圖檔案儲存路徑)
driver.find_element(By.XPATH,"//*[text()='新聞']").screenshot(截圖儲存的路徑)
作者: yetangjian
出處: https://www.cnblogs.com/yetangjian/p/16557548.html
關於作者: yetangjian
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出, 原文連結 如有問題, 可郵件([email protected])諮詢.