目錄:
selenium.webdriver.remote.webdriver.WebDriver
這個類其實是所有其他Webdriver的父類,
例如Chrome Webdriver
,Firefox Webdriver
都是繼承自這個類。這個類中實現了每個Webdriver間相通的方法。
driver.get("https://www.baidu.com")
- close()
關閉瀏覽器當前頁面(只有當前的一個頁面會被關閉)
driver.close()
- quit()
退出webdriver並關閉所有窗口(推薦,這樣退出不會浪費內存)
- refresh()
刷新當前頁面
- title【注意沒有括號】
獲取當前頁面的標題(就是瀏覽器頁面上方的窗口標題)
- page_source
獲取當前頁面渲染之后的源代碼
- current_url
獲取當前頁面的url
- window_handles
獲取當前會話中所有窗口的句柄(句柄就是一個頁面的標志,頁面切換的參數)
方法 | 作用 |
---|---|
find_element_by_xpath () |
通過Xpath 查找 |
find_element_by_class_name () |
通過class屬性 查找 |
find_element_by_css_selector () |
通過css選擇器 查找 |
find_element_by_id () |
通過id 查找 |
find_element_by_link_text () |
通過鏈接文本 查找 |
find_element_by_name () |
通過name屬性 進行查找 |
find_element_by_partial_link_text () |
通過鏈接文本的部分匹配 查找 |
find_element_by_tag_name () |
通過標簽名 查找 |
查找后返回的是一個Webelement
對象。
查找到了對象,就相當於瀏覽器的鼠標已經放在了對象上面,想要對其操作,
就需要用一個變量存放該對象,再進行需要的操作
多個查找
上面的方法都是將第一個找到的元素返回,而將所有匹配的元素進行返回使用的是
find_elements_by_* 方法。
注意:將其中的elelment加上一個s,就是對應的多個查找的方法。
此方法返回的是一個Webelement對象組成的列表。
通過私有方法進行查找
需要導入新的方法:from selenium.webdriver.common.by import By
from selenium.webdriver.common.by import By driver.find_element(By.XPATH, '//button[text()="Some text"]') driver.find_elements(By.XPATH, '//button')
By
這個類是專門用來查找元素時傳入的參數,這個類中有以下屬性:
ID = "id" XPATH = "xpath" LINK_TEXT = "link text" PARTIAL_LINK_TEXT = "partial link text" NAME = "name" TAG_NAME = "tag name" CLASS_NAME = "class name" CSS_SELECTOR = "css selector"
使用了WebDriverWait以后仍然無法找到元素
有很多時候,一個簡單的元素,明明也加了顯式等待,但就是找不到,代碼在仔細查看過后也沒有問題后,多半是以下這幾種情況:
-
由於分辨率設置的原因,查找的元素當前是不可見的。
-
某些頁面的元素是需要向下滾動頁面才會加載的。
-
由於某些其他元素的短暫遮擋,所以無法定位到。
1.分辨率原因
這時候應該設置好分辨率,使當前元素能夠顯示到頁面中。
2.需要滾動頁面
有些頁面為了性能的考慮,頁面下方不在當前屏幕中的元素是不會加載的,只有當頁面向下滾動時才會繼續加載。
而selenium本身不提供向下滾動的方法,所以我們需要去用JS去滾動頁面:
driver.execute_script("window.scrollTo(0, document.body.scrollHeight)")
網上查到的一些滾動方式在Chrome上無效。但這一句是有效的。
滾動的位置:
網頁可見區域寬: document.body.clientWidth;
網頁可見區域高: document.body.clientHeight;
網頁可見區域寬: document.body.offsetWidth (包括邊線的寬);
網頁可見區域高: document.body.offsetHeight (包括邊線的寬);
網頁正文全文寬: document.body.scrollWidth;
網頁正文全文高: document.body.scrollHeight;
網頁被卷去的高: document.body.scrollTop;
網頁被卷去的左: document.body.scrollLeft;
網頁正文部分上: window.screenTop;
網頁正文部分左: window.screenLeft;
屏幕分辨率的高: window.screen.height;
屏幕分辨率的寬: window.screen.width;
屏幕可用工作區高度: window.screen.availHeight;
屏幕可用工作區寬度:window.screen.availWidth;
3.由於其他元素的遮擋
有時候因為一些彈出元素的原因,如果還使用EC.presence_of_element_located()
的話,
我們需要定位的元素就無法被找到,這個時候我們就應該改變我們判斷元素的方法:
element = WebDriverWait(driver, 10).until(
EC.visibility_of_element_located((By.XPATH, '')) )
使用EC.visibility_of_element_located()
方法可以在等待到當前元素可見后,才獲取元素。
在我們找不到元素,或者跟元
-
給當前會話添加一個cookie。
-
cookie_dict: 一個字典對象,必須要有"name"和"value"兩個鍵,
-
可選的鍵有:“path”, “domain”, “secure”, “expiry” 。
-
用法:
driver.add_cookie({‘name’ : ‘foo’, ‘value’ : ‘bar’}) driver.add_cookie({‘name’ : ‘foo’, ‘value’ : ‘bar’, ‘path’ : ‘/’}) driver.add_cookie({‘name’ : ‘foo’, ‘value’ : ‘bar’, ‘path’ : ‘/’, ‘secure’:True})
-
-
get_cookie(name)
按name獲取單個Cookie,沒有則返回None。
-
get_cookies()
獲取所有Cookie,返回的是一組字典。
-
delete_all_cookies
()刪除所有Cookies。
-
delete_cookie
(name)按name刪除指定cookie。
-
獲取當前窗口的截圖保存為一個base64編碼的字符串。
-
get_screenshot_as_file(filename)
獲取當前窗口的截圖保存為一個png格式的圖片,filename參數為圖片的保存地址,最后應該以.png結尾。如果出現IO錯誤,則返回False。
用法:
driver.get_screenshot_as_file(‘/Screenshots/foo.png’)
-
get_screenshot_as_png()
獲取當前窗口的截圖保存為一個png格式的二進制字符串。
-
獲取當前窗口的x,y坐標。(字典格式)
get_window_size
(windowHandle='current')
獲取當前窗口的高度和寬度。(字典格式)
-
get_window_rect()
獲取當前窗口的高度和寬度和當前窗口的x,y坐標。(字典格式)
-
將焦點切換到指定的子框架中
用selenium操作瀏覽器如果需要在打開新的頁面,這個時候會有問題,
因為我們用selenium操作的是第一個打開的窗口,所以新打開的頁面我們是無法去操作的,
所以我們要用到切換窗口:既handle切換的方法
-
switch_to.window
(window_name)切換窗口(參數就是句柄)
自定義彈窗,就是一個自定義的div層,是隱藏頁面中的,當觸發了這個彈窗后,他就顯示出來,
這種方式我們通過正常的定位方式是可以定位到的。
alert彈窗,就要用下面的方法處理:
在當前的window/frame中異步
執行JS代碼。
script:是你要執行的JS代碼。
*args:是你的JS代碼執行要傳入的參數。