您好,登錄后才能下訂單哦!
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,"http://*[@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中? ?
21.操作已經打開的瀏覽器,下面以chrome為例
? ? 1.手動啟動瀏覽器,以debug模式啟動
? ? ? C:\Program Files (x86)>chrome.exe --remote-debugging-port=9222
? ? 2.添加selenium配置
? ? ? options = webdriver.ChromeOptions()
? ? ? options.debugger_address(options)
? ? ? driver = webdriver.Chrome(options)
? ? ? 剩下的按照之前正常操作就可以了
? ? ?
遇到的問題及解決方法:
1.報如下錯誤
selenium.common.exceptions.WebDriverException: Message: unknown error: call function result missing 'value'
? (Session info: chrome=75.0.3770.142)
? (Driver info: chromedriver=2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f),platform=Windows NT 10.0.17134 x86_64)
? ?解決方案:
? ? 這是由于chromedriver和chrome瀏覽器版本不匹配導致的,匹配信息如下:
? ??
chromedriver版本 | 支持的Chrome版本 |
---|---|
v2.41 | v67-69 |
v2.40 | v66-68 |
v2.39 | v66-68 |
v2.38 | v65-67 |
v2.37 | v64-66 |
v2.36 | v63-65 |
v2.35 | v62-64 |
v2.34 | v61-63 |
v2.33 | v60-62 |
v2.32 | v59-61 |
v2.31 | v58-60 |
v2.30 | v58-60 |
v2.29 | v56-58 |
v2.28 | v55-57 |
v2.27 | v54-56 |
v2.26 | v53-55 |
v2.25 | v53-55 |
v2.24 | v52-54 |
v2.23 | v51-53 |
v2.22 | v49-52 |
v2.21 | v46-50 |
v2.20 | v43-48 |
v2.19 | v43-47 |
v2.18 | v43-46 |
v2.17 | v42-43 |
v2.13 | v42-45 |
v2.15 | v40-43 |
v2.14 | v39-42 |
v2.13 | v38-41 |
v2.12 | v36-40 |
v2.11 | v36-40 |
v2.10 | v33-36 |
v2.9 | v31-34 |
v2.8 | v30-33 |
v2.7 | v30-33 |
v2.6 | v29-32 |
v2.5 | v29-32 |
v2.4 | v29-32 |
? ? ?下載地址:http://npm.taobao.org/mirrors/chromedriver/
? ? ? ? ? ? ? ? ? ? ?http://chromedriver.storage.googleapis.com/index.html
? ? ?如果chrome版本太高,建議使用IE瀏覽器代替
?
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。