selenium無頭瀏覽器--谷歌


    什么是無頭瀏覽器?  

無頭瀏覽器,我理解的就是執行腳本的時候,不會打開瀏覽器的界面,但是代碼依舊會執行

    無頭瀏覽器什么時候用?    

測試的時候需要打開瀏覽器,但是打開瀏覽器會影響正常的操作電腦,無法在同一台計算機上繼續工作,

或者在linux下運行腳本的時候,無需打開瀏覽器,只執行代碼就行

這時我們就用到了無頭瀏覽器,無需打開瀏覽器,只需要執行代碼

 

   先看一個簡單的無頭瀏覽器的配置,以谷歌的無頭瀏覽器為例子    

import time
from selenium import webdriver


# 創建一個參數對象,用來控制chrome以無界面模式打開
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')  # # 瀏覽器不提供可視化頁面
chrome_options.add_argument('--disable-gpu')  # 禁用GPU加速,GPU加速可能會導致Chrome出現黑屏,且CPU占用率高達80%以上

# 創建瀏覽器對象
driver = webdriver.Chrome(options=chrome_options, executable_path=r'/Users/Downloads/chromedriver')
driver.implicitly_wait(10)  # 隱式等待

# 訪問URL
driver.get('https://www.baidu.com')  # 未打開瀏覽器界面,即可執行代碼
print(driver.title)  # 百度一下,你就知道
time.sleep(2)

# 關閉瀏覽器
driver.quit()

 

selenium add_argument 參數表

完整的參數參考官方文檔:https://peter.sh/experiments/chromium-command-line-switches/

 

chrome_options.add_argument('--user-agent=""')  # 設置請求頭的User-Agent
chrome_options.add_argument('--window-size=1280x1024')  # 設置瀏覽器分辨率(窗口大小)
chrome_options.add_argument('--start-maximized')  # 最大化運行(全屏窗口),不設置,取元素會報錯
chrome_options.add_argument('--disable-infobars')  # 禁用瀏覽器正在被自動化程序控制的提示
chrome_options.add_argument('--incognito')  # 隱身模式(無痕模式)
chrome_options.add_argument('--hide-scrollbars')  # 隱藏滾動條, 應對一些特殊頁面
chrome_options.add_argument('--disable-javascript')  # 禁用javascript,如果覺得速度慢在加上這個
chrome_options.add_argument('--blink-settings=imagesEnabled=false')  # 不加載圖片, 提升速度
chrome_options.add_argument('--headless')  # 瀏覽器不提供可視化頁面
chrome_options.add_argument('--ignore-certificate-errors')  # 禁用擴展插件並實現窗口最大化
chrome_options.add_argument('--disable-gpu')  # 禁用GPU加速
chrome_options.add_argument('–disable-software-rasterizer')
chrome_options.add_argument('--disable-extensions')

–user-data-dir=”[PATH]”   # 指定用戶文件夾User Data路徑,可以把書簽這樣的用戶數據保存在系統分區以外的分區。
–disk-cache-dir=”[PATH]“  # 指定緩存Cache路徑
–first run  # 重置到初始狀態,第一次運行
--omnibox-popup-count="num"  # 將地址欄彈出的提示菜單數量改為num個。我都改為15個了。
--user-agent="xxxxxxxx"  # 修改HTTP請求頭部的Agent字符串,可以通過about:version頁面查看修改效果 
--disable-plugins   # 禁止加載所有插件,可以增加速度。可以通過about:plugins頁面查看效果 
--disable-java   # 禁用java 
--no-sandbox   # 取消沙盒模式
--single-process   # 單進程運行
--process-per-tab   # 每個標簽使用單獨進程
--process-per-site   # 每個站點使用單獨進程
--in-process-plugins   # 插件不啟用單獨進程
--disable-popup-blocking   # 禁用彈出攔截
--disable-plugins   # 禁用插件
--disable-images   # 禁用圖像
--enable-udd-profiles   # 啟用賬戶切換菜單
--proxy-pac-url   # 使用pac代理 [via 1/2]
--lang=zh-CN   # 設置語言為簡體中文
--disk-cache-dir   # 自定義緩存目錄
--disk-cache-size   # 自定義緩存最大值(單位byte)
--media-cache-size   # 自定義多媒體緩存最大值(單位byte)
--bookmark-menu   # 在工具 欄增加一個書簽按鈕
--enable-sync   # 啟用書簽同步

 

 

 

   實例:使用無頭瀏覽器登錄網易郵箱發送郵件   

 

 

 

import time
import datetime  # 獲取當前時間
from getpass import getpass  # 輸入的密碼時不顯示
from selenium import webdriver


# 登錄網易郵箱
def longin(url, username, password):
    driver.get(url=url)
    driver.find_element_by_id('accname').send_keys(username)  # 輸入用戶名
    driver.find_element_by_id('accpwd').send_keys(password)  # 輸入用戶名
    driver.find_element_by_class_name('loginbtn').submit()  # 點擊登錄BTN


# 寫郵件並發送
def send_email(title, addressee, msg):
    try:
        # 先登錄
        longin(url, username, password)
        
        # 1、點擊【寫信】
        driver.find_element_by_class_name('p-edit').click()
        time.sleep(3)
        '''
        2、輸入收件人和標題
           定位時使用某一種方法無法定位到,所以多種定位交叉使用
        '''
        driver.find_elements_by_class_name('right-inner')[0].find_element_by_name('to').find_element_by_tag_name(
            'input').send_keys(addressee)  # 輸入收件人
        driver.find_elements_by_class_name('right-inner')[0].find_element_by_name('to').find_element_by_tag_name(
            'input').click()  # 點擊一下收件人輸入框,避免下拉框遮擋主題輸入框
        driver.find_element_by_class_name('subject').find_element_by_tag_name('input').send_keys(title)  # 輸入主題
        
        '''
        3、輸入郵件內容(只有文本)
           因為文本框是在ifrme內的,ifrme是內嵌的網頁元素,所以要先進入到ifrme內,再操作
        '''
        iframe = driver.find_element_by_id('ueditor_0')  # 先獲取iframe,定位到它所在的位置
        driver.switch_to.frame(iframe)  # 切換到iframe中
        driver.find_element_by_xpath('/html/body').send_keys(msg)  # 在ifrme中操作元素,因為沒有id也沒有class,所以使用xpath
        driver.switch_to.default_content()  # 切換到iframe上之后,就無法對iframe以外的元素進行操作了,我們需要退出iframe再繼續
        
        # 點擊【發送】
        time.sleep(5)
        driver.find_element_by_id('main').find_element_by_class_name('g-mnc').find_element_by_xpath(
            '//*[@class="g-mnc"]/div[1]/div[1]/div[1]/div[1]').click()
        print('已發送完成!!!')
    finally:
        time.sleep(3)
        driver.close()  # 不管之前能否成功發送郵件,最后都關閉瀏覽器


if __name__ == '__main__':
    chrome = r'/usr/local/bin/chromedriver'  # chrome驅動文件的路徑
    
    url = 'https://qiye.163.com/login/?from=ym'  # 郵箱地址
    username = input('用戶名:').strip()  # 郵箱賬號
    password = getpass('密碼:').strip()  # 郵箱密碼
    
    addressee = input('收件人郵箱:')  # 收件人郵箱
    title = input('郵件標題:')  # 郵件標題
    text_msg = input('請輸入郵件內容(只支持文本類型):')  # 郵件內容
    
    '''
    郵件內容
        datetime.datetime.now() 當前時間小數點后還有6位
        datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') 當前時間,只精確到秒
    '''
    msg = '{}\n{}'.format(text_msg, datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
    
    '''
    無頭瀏覽器配置
    '''
    chrome_options = webdriver.ChromeOptions()  # 建一個參數對象,用來控制chrome以無界面模式打開
    chrome_options.add_argument('--no-sandbox')  # 取消沙盒模式,瀏覽器的安全性會降低,如果不取消,linux下運行會報錯
    chrome_options.add_argument('--disable-dev-shm-usage')  # 解決資源有限的問題
    chrome_options.add_argument('--headless')  # 瀏覽器不提供可視化頁面
    chrome_options.add_argument('--disable-gpu')  # 禁用GPU加速
    
    driver = webdriver.Chrome(options=chrome_options, executable_path=chrome)  # 創建瀏覽器對象
    driver.implicitly_wait(10)  # 隱式等待10s
    
    send_email(title, addressee, msg)

 

 

 

 

 

 

 無頭很簡單,代碼不變,只是加了無頭配置

上述代碼中與原來的發郵件代碼不同的地方如下:

 

 

 

 

 

 

 

 

 

 

結束!


免責聲明!

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



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