Selenium簡介


官網(https://selenium-python.readthedocs.io/)

selenium原理

  • 對於每一個selenium腳本,一個http請求會被創建並且發送給瀏覽器的驅動(即chromeDriver.exe)。
  • 瀏覽器驅動中包含了一個HTTP Server,用來接收這些http請求
  • HTTP Server 接收到請求后根據請求來具體操縱對應的瀏覽器
  • 瀏覽器執行具體的測試步驟,並將步驟結果返回給HTTP Server
  • HTTP Server又將結果返回給Selenium的腳本,如果是錯誤的http代碼我們就會在控制台看到對應的報錯信息
  • 因為HTTP協議是一個瀏覽器和WEB服務器之間通信的標准協議,幾乎每一種編程語言都提供了豐富的http libraries,這樣就可以方便的處理客戶端Client和服務器Server之間的請求request及響應response
  • WebDriver的結構就是C/S結構,WebDriver API相當於是客戶端,而瀏覽器驅動是服務端
  • WebDriver基於的協議是 JSON Wire protocol,這個協議是在http協議的基礎上,對http請求及響應的數據做了進一步的規范。在Client和Server之間,只要是基於 JSON Wire protocol 來傳遞數據,就與具體的腳本語言無關了。

安裝

pip install selenium

瀏覽器

  • selenium本質是通過驅動瀏覽器,完全模擬瀏覽器的操作,比如跳轉、輸入、點擊、下拉等,來拿到網頁渲染之后的結果,可支持多種瀏覽器
from selenium import webdriver
browser=webdriver.Chrome()
browser=webdriver.Firefox()
browser=webdriver.PhantomJS()
browser=webdriver.Safari()
browser=webdriver.Edge()
  • 瀏覽器初始化設置(Chrome瀏覽器為例)
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument('window-size=1920x3000') #指定瀏覽器分辨率
chrome_options.add_argument('--disable-gpu') #谷歌文檔提到需要加上這個屬性來規避bug
chrome_options.add_argument('--hide-scrollbars') #隱藏滾動條, 應對一些特殊頁面
chrome_options.add_argument('blink-settings=imagesEnabled=false') #不加載圖片, 提升速度
chrome_options.add_argument('--headless') #瀏覽器不提供可視化頁面. linux下如果系統不支持可視化不加這條會啟動失敗
chrome_options.binary_location = r"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" #手動指定使用的瀏覽器位置

driver=webdriver.Chrome(chrome_options=chrome_options)
driver.get('https://www.baidu.com')
print('hao123' in driver.page_source)

driver.close() #切記關閉瀏覽器,回收資源

基本使用

from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By  # 選擇器
from selenium.webdriver.common.keys import Keys # 鍵盤按鍵操作
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait # 等待頁面加載某些元素

browser=webdriver.Chrome()
try:
    browser.get('https://www.baidu.com')

    input_tag=browser.find_element_by_id('kw')
    input_tag.send_keys('selenium')
    input_tag.send_keys(Keys.ENTER) #輸入回車

    wait=WebDriverWait(browser,10)
    wait.until(EC.presence_of_element_located((By.ID,'content_left'))) #等到id為content_left的元素加載完畢,最多等10秒

    print(browser.page_source)
    print(browser.current_url)
    print(browser.get_cookies())

finally:
    browser.close()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM