1. 程式人生 > >Python爬蟲之selenium的使用(八)

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')