selenium安裝 selenium操作瀏覽器原理 早期selenium 1.0 用的selenium RC, 後來selenum2集合了selenium1.0 + webdriver,selenium RC被webdriver替換。通過webdriver,測試腳本(例如python)可以方便的通 ...
selenium安裝
pip install selenium
selenium操作瀏覽器原理
早期selenium 1.0 用的selenium RC, 後來selenum2集合了selenium1.0 + webdriver,selenium RC被webdriver替換。通過webdriver,測試腳本(例如python)可以方便的通過API操作瀏覽器頁面元素,包括打開,關閉,最大化,最小化,元素定位,元素單擊等等等。但是selenium操作瀏覽器還需要一個驅動程式,不同的瀏覽器如filefox,chrome所需要的驅動程式不一樣,就算是同款瀏覽器,因為瀏覽器內部提供的原生自動化介面API不同,也需要適配不同版本的驅動程式,不然就有可能出現調用介面失敗的情況。
webdriver按照server-client經典設計模式設計,client可以理解為測試腳本,selenium支持多種語言(java,python,ruby,php等),server端可以理解為瀏覽器,client和server的通信根據the WebDriver Wire協議告訴服務端我們希望瀏覽器接下來做什麼事情。
驅動下載
Chrome: https://sites.google.com/a/chromium.org/chromedriver/downloads Edge: https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/ Firefox: https://github.com/mozilla/geckodriver/releases Safari: https://webkit.org/blog/6900/webdriver-support-in-safari-10/
一個selenium簡單的例子:(相應驅動要放在path環境變數中)
from selenium import webdriver browser = webdriver.Chrome() url = 'http://www.baidu.com' browser.get(url)
瀏覽器基礎操作
方法比較多,先整理一些,有需要後面再補充進來(有些參考了webdriver.py和webelement.py)
新建一個driver,初始化要操作的瀏覽器
driver = webdriver.Chrome()
訪問url
driver.get(url)
最大化視窗
driver.maximize_window()
設置視窗寬,高
driver.set_window_size(width,height)
頁面操作
browser.back() browser.forward() browser.refresh() browser.close() 關閉當前視窗 browser.quit() 退出驅動並關閉每個關聯視窗
頁面信息
browser.title browser.current_url browser.current_window_handle 返回當前視窗句柄 driver.window_handles 所有視窗handle
frame切換
switch_to_frame() switch_to_window()
對話框
switch_to_alert()
控制項填寫信息,也可以是文件上傳
send_keys()
回車
send_keys(Keys.RETURN)
判斷元素是否可見
is_displayed()
操作cookie
get_cookies() get_cookie(name) delete_cookie(name) delete_all_cookies() add_cookie(cookie_dict)
顯式等待和隱式等待
顯式等待會讓WebDriver等待滿足一定的條件以後再進一步的執行。 而隱式等待讓Webdriver等待一定的時間後再才是查找某元素。
顯式等待
WebDriverWait(driver, 10).untile(EC.visibility_of_element_located((By.CLASS_NAME, "logo_sogou")))
隱式等待
implicitly_wait(10)
屏幕截屏
save_screeshot(filepath)
元素查找
id查找
find_element_by_id("xxx")
name查找
find_element_by_name("xxx")
class查找
find_element_by_class_name("xxx")
css查找
find_element_by_css_selector('.s_ipt')
XPath查找
類似於xml定位一樣,html的標簽也可以用這類方式來查找,而且更健壯
find_element_by_xpath("/html/body/form[1]") find_element_by_xpath("//form[1]") html頁面中第一個form元素 find_element_by_xpath("//div[@id='search_ext']") find_element_by_xpath("//div[@class='ipt_wrap']/span[1]") find_element_by_xpath("//input[@name='continue'][@type='button']")
超鏈接查找
find_element_by_link_text('Continue') 完全匹配 find_element_by_partial_link_text('Conti') 部分匹配
一次查找返回多個元素(list)
find_elements_by_name find_elements_by_xpath find_elements_by_link_text
參考文章:
http://selenium-python-zh.readthedocs.io/en/latest/index.html