电竞比分网-中国电竞赛事及体育赛事平台

分享

selenium與谷歌無頭瀏覽器的應(yīng)用

 黃金屋1 2019-12-11

1.selenium的介紹

  • selenium是一個web自動化測試用的框架. 程序員可以通過代碼實(shí)現(xiàn)對瀏覽器的控制, 比如打開網(wǎng)頁, 點(diǎn)擊網(wǎng)頁中的元素, 實(shí)現(xiàn)鼠標(biāo)滾動等操作.

  • 它支持多款瀏覽器, 如谷歌瀏覽器, 火狐瀏覽器等等, 當(dāng)然也支持無頭瀏覽器.

使用selenium的目的

  • 在爬取數(shù)據(jù)的過程中, 經(jīng)常遇到動態(tài)數(shù)據(jù)加載, 一般動態(tài)數(shù)據(jù)加載有兩種, 一種通過ajax請求加載數(shù)據(jù), 另一種通過js代碼加載動態(tài)數(shù)據(jù).

  • selenium可以模擬人操作真實(shí)瀏覽器, 獲取加載完成的頁面數(shù)據(jù)

  • ajax:
    url有規(guī)律且未加密, 直接構(gòu)建url連接請求
    url加密過無法破解規(guī)律 --> selenium

  • js動態(tài)數(shù)據(jù)加載 --> selenium

2.selenium的安裝

安裝三要素: 瀏覽器、驅(qū)動程序、selenium框架

瀏覽器: 推薦谷歌瀏覽器, 標(biāo)準(zhǔn)穩(wěn)定版本

推薦谷歌的理由是因?yàn)楣雀韬糜? 并且大多數(shù)程序員都在用

驅(qū)動程序: 下載地址

驅(qū)動程序的下載版本需要和谷歌的版本一致, 前三位一致即可(例:76.0.3809)

框架: 自己搭建即可

以上完成后直接在控制臺輸入: pip install selenium

3.selenium常用操作

常用操作有很多種, 比如: 獲取頁面元素、輸入內(nèi)容、點(diǎn)擊、退出… ↓

3.1 測試一下你的selenium

# 從selenium中導(dǎo)入驅(qū)動程序
from selenium import webdriver
# 實(shí)例化瀏覽器對象
browser = webdriver.Chrome('driverpath')
# 發(fā)送get請求:
browser.get('https://www.baidu.com')

dirverpath: 驅(qū)動的存儲路徑, 可以直接將驅(qū)動放在當(dāng)前腳本所在的文件夾, 如果放在本地文件夾還是無法執(zhí)行, 那就將驅(qū)動放在谷歌瀏覽器的Application文件夾當(dāng)中, 并指明路徑

3.2 獲取頁面元素

find_element_by_id(): 根據(jù)元素的id獲取元素
find_element_by_name(): 根據(jù)元素的name獲取元素
find_element_by_xpath(): 根據(jù)xpath表達(dá)式獲取元素
find_element_by_class_name(): 根據(jù)class的值
find_element_by_css_selector(): 根據(jù)css選擇器

3.3 節(jié)點(diǎn)交互操作

click():  點(diǎn)擊
send_keys():  輸入內(nèi)容
clear():  清空操作
execute_script(js代碼):  執(zhí)行指定的js代碼
quit(): 退出瀏覽器

列舉一段自己常用的js代碼: window.scrollTo(0, document.body.scrollHeight) 可以模擬鼠標(biāo)滾動一屏高度

3.4 獲取網(wǎng)頁的數(shù)據(jù)

browser.page_source:  獲取網(wǎng)頁的源碼, str類型

3.5 子頁面

# 如果一個頁面是有嵌套關(guān)系的話, 可以使用frame進(jìn)入指定的頁面, 例如QQ空間
switch_to.frame('frame')

4.使用selenium模擬登錄qq空間

import time
from selenium import webdriver

# 此處driverpath需要存放自己下載驅(qū)動的路徑
browser = webdriver.Chrome(r'driverpath')

# 獲取QQ空間的url, 并發(fā)送請求
url = 'https://qzone.qq.com/'
browser.get(url)

# qq空間使用的是組建嵌套,登錄要先選擇進(jìn)入到子頁面
browser.switch_to.frame('login_frame')

# 獲取賬號密碼登錄連接的id, 然后點(diǎn)擊賬號密碼登錄
a_tag = browser.find_element_by_id('switcher_plogin')
a_tag.click()
# 在下面會多次用到sleep讓休眠幾秒鐘, 目的就是避免訪問過快造成被誤認(rèn)為腳本
time.sleep(2)

# 獲取賬號文本框并輸入賬號
user = browser.find_element_by_id('u')
user.send_keys('自己的QQ賬號')
time.sleep(2)

# 獲取密碼框并寫入密碼
pwd = browser.find_element_by_id('p')
pwd.send_keys('自己的QQ密碼')
time.sleep(2)

# 獲取登錄按鈕并點(diǎn)擊
button = browser.find_element_by_id('login_button')
button.click()

5.谷歌無頭瀏覽器

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

# 實(shí)例化Options對象
chrome_options = Options()

# 增加一個參數(shù), 告訴瀏覽器是無頭瀏覽器
chrome_options.add_argument('--headless')

# 增加一個參數(shù), 告訴瀏覽器不需要使用GPU渲染
chrome_options.add_argument('--disable-gpu')

# 驅(qū)動路徑, 谷歌的驅(qū)動存放路徑
path = r'driverpath'

# 實(shí)例化瀏覽器對象
browser = webdriver.Chrome(executable_path=path, options=chrome_options)

# 打開指定的頁面
browser.get('https://www.baidu.com')

# 打印訪問頁面的源碼
print(browser.page_source)

# 將頁面源碼寫入到文件當(dāng)中
with open('bai_du.html', 'w', encoding='utf-8') as f:
    f.write(browser.page_source)

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多