Python爬蟲之selenium的使用(八)
Python爬蟲之selenium的使用
一、簡介
二、安裝
三、使用
一、簡介
Selenium 是自動化測試工具。它支援各種瀏覽器,包括 Chrome,Safari,Firefox 等主流介面式瀏覽器,如果你在這些瀏覽器裡面安裝一個 Selenium 的外掛,那麼便可以方便地實現Web介面的測試。Selenium 支援這些瀏覽器驅動。Selenium支援多種語言開發,比如 Python,Java,C,Ruby等等。
二、安裝
1.安裝selenium
pip3 install selenium
2.配置驅動 (下載驅動,然後將驅動檔案路徑配置在環境變數)
驅動下載地址:https://sites.google.com/a/chromium.org/chromedriver/downloads
注意:你下載的驅動要和你瀏覽器版本能夠相容才能使用。
三、使用
1.宣告瀏覽器物件
from selenium import webdriver browser = webdriver.Chrome() browser = webdriver.Firefox() browser = webdriver.Edge() browser = webdriver.Phantom() browser = webdriver.FirefoxJS() browser = webdriver.Safari()
2.訪問頁面
from selenium import webdriver
broswer = webdriver.Chrome()
#訪問淘寶頁面 broswer.get('https://www.taobao.com')
#獲取頁面原始碼 print(broswer.page_source)
#關閉 broswer.close()
3.查詢單個元素
from selenium import webdriver # 啟動配置 option = webdriver.ChromeOptions() option.add_argument('disable-infobars') # 開啟chrome瀏覽器 broswer = webdriver.Chrome() broswer.get('https://www.taobao.com')
#下面三種方法都是獲取同一元素 input1 = broswer.find_element_by_id('q') input2 = broswer.find_element_by_css_selector('#q') input3 = broswer.find_element_by_xpath('//*[@id="q"]') print(input1,input2,input3) broswer.close()
執行結果如下:
<selenium.webdriver.remote.webelement.WebElement (session="b26040f3a0b3810381abd8f13e513095", element="0.3260737871611288-1")> <selenium.webdriver.remote.webelement.WebElement (session="b26040f3a0b3810381abd8f13e513095", element="0.3260737871611288-1")> <selenium.webdriver.remote.webelement.WebElement (session="b26040f3a0b3810381abd8f13e513095", element="0.3260737871611288-1")>
全部獲取單個元素的方法:
find_element_by_id() find_element_by_name() find_element_by_xpath() find_element_by_link_test() find_element_by_tag_name() find_element_by_class_name() find_element_by_css_selector() find_element_by_partial_link_test()
4.查詢多個元素
from selenium import webdriver # 加啟動配置 option = webdriver.ChromeOptions() option.add_argument('disable-infobars') # 開啟chrome瀏覽器 broswer = webdriver.Chrome() broswer.get('https://www.taobao.com') input2 = broswer.find_elements_by_css_selector('#q')
print(input2)
broswer.close()
執行結果如下:
[<selenium.webdriver.remote.webelement.WebElement (session="0c6d5918fff4982403777d89fd64b6bd", element="0.9184632404888653-1")>]
全部獲取多個元素的方法:
find_elements_by_id() find_elements_by_name() find_elements_by_xpath() find_elements_by_link_test() find_elements_by_tag_name() find_elements_by_class_name() find_elements_by_css_selector() find_elements_by_partial_link_test()
5.新增User-Agent
使用webdriver,是可以更改User-Agent的,程式碼如下:
from selenium import webdriver options = webdriver.ChromeOptions() options.add_argument('user-agent="Mozilla/5.0 (Linux; Android 4.0.4; Galaxy Nexus Build/IMM76B) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.133 Mobile Safari/535.19"') driver = webdriver.Chrome(chrome_options=options) driver.get('https://www.baidu.com/')
6.自動化測試的時候,啟動瀏覽器出現‘Chrome正在受到自動軟體的控制’,可以隱藏
在瀏覽器配置里加個引數,忽略掉這個警告提示語,disable_infobars
from selenium import webdriver
option = webdriver.ChromeOptions()
option.add_argument('disable-infobars')
driver = webdriver.Chrome(chrome_options=option)
driver.get('https://www.baidu.com/')
7.啟動瀏覽器的時候不想看的瀏覽器執行,那就載入瀏覽器的靜默模式,讓它在後臺偷偷執行。用headless
from selenium import webdriver
option = webdriver.ChromeOptions()
option.add_argument('headless')
driver = webdriver.Chrome(chrome_options=option)
driver.get('https://www.baidu.com/')
8.獲取元素資訊
# 獲取屬性 from selenium import webdriver broswer = webdriver.Chrome() url = 'https://www.taobao.com' broswer.get(url) logo = broswer.find_element_by_class_name('logo') print(logo) print(logo.get_attribute('class'))
# 獲取文字值 from selenium import webdriver broswer = webdriver.Chrome() url = 'https://www.taobao.com' broswer.get(url) li = broswer.find_element_by_class_name('J_SearchTab') print(li) print(li.text)
#獲取ID、位置、標籤名、大小 from selenium import webdriver broswer = webdriver.Chrome() url = 'https://www.taobao.com' broswer.get(url) logo = broswer.find_element_by_class_name('logo') print(logo.id) print(logo.location) print(logo.tag_name) print(logo.size)
9.互動操作
元素互動操作(先獲取特定的元素,對獲取的元素呼叫互動方法)
from selenium import webdriver
import time # 加啟動配置 option = webdriver.ChromeOptions() option.add_argument('disable-infobars') # 開啟chrome瀏覽器 broswer = webdriver.Chrome() broswer.get('https://www.taobao.com')
#獲取輸入框 input =broswer.find_element_by_id('q')
#模擬使用者輸入iphone input.send_keys('iphone')
time.sleep(2)
#清除輸入框 input.clear()
#輸入ipad input.send_keys('ipad')
#獲取按鈕 button = broswer.find_element_by_class_name('btn-search')
#點選按鈕
button.click()
更多元素互動操作:http://selenium-python.readthedocs.org/locating-elements.html
互動動作(將動作附加到動作鏈中序列執行)
執行JavaScript程式碼
from selenium import webdriver broswer = webdriver.Chrome() broswer.get('https://www.zhihu.com') broswer.execute_script('window.scrollTo(0,document.body.scrollHeight)') broswer.execute_script('alert("To Bottom")')
滑鼠操作
在現實的自動化測試中關於滑鼠的操作不僅僅是click()單擊操作,還有很多包含在ActionChains類中的操作。如下:
- context_click(elem) 右擊滑鼠點選元素elem,另存為等行為
- double_click(elem) 雙擊滑鼠點選元素elem,地圖web可實現放大功能
- drag_and_drop(source,target) 拖動滑鼠,源元素按下左鍵移動至目標元素釋放
- move_to_element(elem) 滑鼠移動到一個元素上
- click_and_hold(elem) 按下滑鼠左鍵在一個元素上
- perform() 在通過呼叫該函式執行ActionChains中儲存行為
舉例如下圖所示,獲取通過滑鼠右鍵另存為百度圖片logo。程式碼:
鍵盤操作
參考:http://selenium-python.readthedocs.org/api.html
前面講述了滑鼠操作,現在講述鍵盤操作。在webdriver的Keys類中提供了鍵盤所有的按鍵操作,當然也包括一些常見的組合鍵操作如Ctrl+A(全選)、Ctrl+C(複製)、Ctrl+V(貼上)。更多鍵參考官方文件對應的編碼。
- send_keys(Keys.ENTER) 按下回車鍵
- send_keys(Keys.TAB) 按下Tab製表鍵
- send_keys(Keys.SPACE) 按下空格鍵space
- send_keys(Kyes.ESCAPE) 按下回退鍵Esc
- send_keys(Keys.BACK_SPACE) 按下刪除鍵BackSpace
- send_keys(Keys.SHIFT) 按下shift鍵
- send_keys(Keys.CONTROL) 按下Ctrl鍵
- send_keys(Keys.ARROW_DOWN) 按下滑鼠游標向下按鍵
- send_keys(Keys.CONTROL,'a') 組合鍵全選Ctrl+A
- send_keys(Keys.CONTROL,'c') 組合鍵複製Ctrl+C
- send_keys(Keys.CONTROL,'x') 組合鍵剪下Ctrl+X
- send_keys(Keys.CONTROL,'v') 組合鍵貼上Ctrl+V
10.前進後退頁面
import time from selenium import webdriver broswer = webdriver.Chrome() broswer.get('https://www.baidu.com') broswer.get('https://www.taobao.com')
#後退 broswer.back() time.sleep(2)
#前進 broswer.forward() broswer.close()
11.Cookies操作
from selenium import webdriver broswer = webdriver.Chrome() broswer.get('https://www.zhihu.com')
#獲取cookie print(broswer.get_cookies())
#新增cookie broswer.add_cookie({'name':'name','value':'germeny'})
#再次獲取cookie print(broswer.get_cookies())
12.選項卡操作
import time from selenium import webdriver broswer = webdriver.Chrome() broswer.get('https://www.zhihu.com')
#開啟新視窗 broswer.execute_script('window.open()') print(broswer.window_handles)
#切斷到第二個選項卡(視窗) broswer.switch_to_window(broswer.window_handles[1]) time.sleep(1)
#切換到第一個選項卡(視窗) broswer.switch_to_window(broswer.window_handles[0]) broswer.get('https://www.baidu.com')