1. 定位元素的幾種方法
find_element_by_id(優先,常用),對應的是id屬性
find_element_by_name(優先,常用),對應的是name屬性
find_element_by_class_name,對應的是class屬性的值
find_element_by_tag_name,對應的是標籤名稱,如input,p,span,title,body....
find_element_by_link_text,對應的是超鏈接的文本內容
find_element_by_partial_link_text,對應的是部分超鏈接的文本內容
find_element_by_xpath,對應的是元素的path,可通過firebug工具獲得
find_element_by_css_selector,通過css屬性定位,class用. id用#,
示例:
driver.find_element_by_css_selector(".s_ipt").send_keys("selenium")
driver.find_element_by_css_selector("#su").click()
2.By定位
find_element(By.ID,"kw")
find_element(By.NAME,"wd")
find_element(By.CLASS_NAME,"s_ipt")
find_element(By.TAG_NAME,"input")
find_element(By.LINK_TEXT,u"新聞")
find_element(By.PARTIAL_LINK_TEXT,u"新")
find_element(By.XPATH,"//*[@class='bg s_btn']")
find_element(By.CSS_SELECTOR,"span.bg s_btn_wr>input#su")
3.幾種瀏覽器操作
說明:操作瀏覽器需要將瀏覽器插件目錄放入環境變量中,不然找不到
from selenium import webdriver
driver = webdriver.Ie() --IE瀏覽器,插件名爲 IEDriverServer.exe
driver = webdriver.Firefox() -- 火狐瀏覽器,插件名爲 geckodriver.exe
driver = webdriver.Chrome() -- 谷歌瀏覽器,插件名爲 chromedriver.exe
driver = webdriver.Edge() --Edge瀏覽器(windows10系統自帶), 無需插件
操作360瀏覽器:
360瀏覽器內核基於chrome瀏覽器,因此插件用的也是chromedriver.exe,不過得配置下
chrome_options = webdriver.ChromeOptions()
chrome_options.binary_location = r"C:\Users\kevin\AppData\Roaming\360se6\Application\360se.exe" #這裏是360安全瀏覽器的路徑
chrome_options.add_argument(r'--lang=zh-CN') # 這裏添加一些啓動的參數
d = webdriver.Chrome(chrome_options=chrome_options)
4.控制瀏覽器
設置寬高:driver.set_window_size(400,500), ------設置寬400,高500
設置全屏:driver.maximize_windows()
前進:driver.forward()
後退: driver.back()
刷新當前頁面:driver.refresh()
5.定位到的元素操作
driver.find_element_by_xx('xx').click() --點擊操作
driver.find_element_by_xx('xx').clear() --清除操作,清除文本框中的內容
driver.find_element_by_xx('xx').send_keys('123') --輸入數據到文本框
driver.find_element_by_xx('xx').submit() --提交操作,相當於回車,如在搜索框中輸入內容後,執行此方法,可直接執行搜索動作
driver.find_element_by_xx('xx').size() --獲取元素的尺寸
driver.find_element_by_xx('xx').text --獲取元素的文本
driver.find_element_by_xx('xx').get_attribute('id') --獲取id屬性,只要是屬性都可通過此方法獲取,如name,id,type,class.
driver.find_element_by_xx('xx').is_displayed() --獲取元素是否可見,可見返回True,否則False
6.鼠標事件
Actions類中提供了鼠標操作的常用方法
perform() --執行所有Actions類中存儲的行爲
context_click() --右擊
double_click() --雙擊
drap_and_drop() --拖動
move_to_element --懸停
調用示例:
context_click()
from selenium.webdriver.common.action_chains ActionChains driver = webdriver.Ie() right_click = driver.find_element_by_id() ActionChains(driver).context_click(right_click).perform()
其他的方法調用同上,只是改下方法而已
7.鍵盤操作
模擬組合鍵 CTRL+A,CTRL+C等等
from selenium.webdriver.common.keys import Keys
退格鍵 Keys.BACK_SPACE --- driver.find_elemennt_by_id('').send_keys(Keys.BACK_SPACE)
空格鍵Keys.SPACE --- driver.find_elemennt_by_id('').send_keys(Keys.SPACE)
輸入CTRL+A --- driver.find_elemennt_by_id('').send_keys(Keys.CONTROL,'a')
回車鍵 --- driver.find_elemennt_by_id('').send_keys(Keys.ENTER)
8.設置元素等待
顯式等待:
一直檢測並等待某個元素出現或消失,達到最大時長條件還未成立則拋出超時異常
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Ie()
driver.get("https://www.baidu.com")
element = WebDriverWait(driver,5,0.5).until(
EC.presence_of_ element_located((By.id,"kw"))
)
element.send_keys('hello')
5:表示最長等待時間
0.5:檢測間隔時間,也就是隔多長時間檢測一次,單位秒
until:直到括號中條件成立,也存在until not
隱式等待:
driver.implicitly_wait(10),單位爲秒,不設置默認爲0,一般寫在用例開頭,針對整條用例有效,在定位一個元素時,如果元素未加載出來,則定位不到。此方 法會在設定時間內一直檢測,檢測到了就向下進行,否則就拋出超時異常
sleep休眠:
強制等待一段時間
import time
time.sleep(10)
9.定位一組元素
find_elements_by_xx,同定位單個元素一樣,不過element是elements
示例:勾選全部checkbox
checkboxs = driver.find_elements_by_tag_name("input")
for checkbox in checkboxs:
if checkbox.get_attribute("type") == "checkbox":
checkbox.click()
10.操作下拉選擇框
方法:
選擇:
select_by_index() --通過索引
select_by_value() --通過value值
select_by_visiable_text() --通過顯示的文本
反選:
deselect_by_index() --通過索引
deselect_by_value() --通過value值
deselect_by_visiable_text() --通過顯示的文本
deselect_all() --取消選擇所有
示例:
<select id="sid">
<option></option>
<option value="o1" id="id1">顯示文本1</option>
<option value="o2" id="id2">顯示文本2</option>
<option value="o3" id="id3">顯示文本3</option>
</select>
選擇示例:
select_by_index(1) --通過索引
select_by_value('o2' ) --通過value值
select_by_visiable_text('顯示文本2') --通過顯示的文本
完整示例:
from selenium.webdriver.support.ui import Select
select = Select(driver.find_element_by_id("sid"))
select.select_by_index(1)
11. 多表單切換
許多頁面存在表單嵌套情況,從一個表單是無法直接定位到其他表單中元素的,需要進行表單切換
f = driver.find_element_by_id("fr") --定位到id爲fr的表單,定位方法通用
driver.switch_to.frame(f) ---切換到id爲fr的表單中
操作完成後跳到最外層表單: driver.switch_to.default_content()
12.多窗口切換
獲取當前窗口的handle: current_handle = driver.current_window_handle
獲取所有窗口handle: handles = driver.window_handles
切換到其他窗口
for hand in handles:
if hand != current_handle:
driver.swith_to.window(hand) --切換窗口
13.彈窗處理
針對alert,prompt,confirm出現的彈窗,可使用driver.switch_to_alert()進行捕獲並處理
方法:
text --返回彈窗的文本信息
accept(), --接受彈窗,也就是點擊確定
dismiss() --取消彈窗
調用示例:
driver.switch_to_alert().accept() --點擊確定
14.上傳文件
方法一:直接通過send_keys()方法輸入文件路徑到文本框中,點擊提交按鈕
方法二:通過AutoIt工具,將操作過程打包成exe文件,然後通過python進行調用
15.操作cookie
獲取所有cookie: driver.get_cookies()
獲取名爲xx的cookie: driver.get_cookie('xx')
添加cookie: driver.add_cookie(dict) -- 參數爲字典對象
刪除所有cookie: driver.delete_all_cookies()
16.調用JavaScript
js = "window.scrollTo(100,450);"
driver.execute_script(js)
17.處理HTM5視頻播放
示例:
video = driver.find_element_by_xpath("body/Section[1]/div/video")
driver.execute_script("return arguments[0].play()",video) --播放
driver.execute_script("return arguments[0].pause()",video) --暫停
18.窗口截圖
driver.get_screenshot_as_file("D:\xxx\xx.png")
19.關閉窗口
driver.close() ---關閉當前窗口
driver.quit() ---關閉所有窗口
20.驗證碼處理
1.去掉驗證碼
2.設置萬能驗證碼
3.使用cookie
4.驗證碼識別
5.驗證碼存放在cookie中