selenium使用headless無頭模式實現無界面運行


總所周知,平時使用selenium做web自動化,運行代碼的時候都會打開瀏覽器驅動訪問界面。那么有沒有什么方式可以實現無界面運行,讓我們在調試代碼的時候可以屏蔽界面,去做其他事情呢,答案是有的!

加上以下操作,就能實現無界面運行了。

先導包:

from selenium.webdriver.chrome.options import Options

加入如下配置:

chrome_options = Options()

chrome_options.add_argument('--window-size=1920,1080')      # 設置窗口界面大小

chrome_options.add_argument('--headless')

driver = webdriver.Chrome(chrome_options=chrome_options)

 

參考代碼:

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



class Zutuan():
    def __init__(self):
        """打開瀏覽器"""
        self.chrome_options = Options()
        self.chrome_options.add_argument('--window-size=1920,1080')
        self.chrome_options.add_argument('--headless')
        self.driver = webdriver.Chrome(chrome_options=self.chrome_options)

    def open_zutuan(self, url):
        """傳入組團url"""
        self.driver.get(url)
        #self.driver.maximize_window()
        self.driver.refresh()
        #time.sleep(0.01)
        self.driver.implicitly_wait(30)       # todo implicitly隱式等待,等待元素可見

    def option_element(self, user, password):
        """xpath定位元素"""
        self.driver.find_element_by_xpath('//div[@class="login a"]/i').click()
        time.sleep(0.01)
        self.driver.find_element_by_xpath('//div[@class="a-title"]').click()
        self.driver.find_element_by_xpath('//input[@type="text" or @class="userName"]').send_keys(user)
        self.driver.find_element_by_xpath('//input[@type="password"]').send_keys(password)
        self.driver.find_element_by_xpath('//div[@class="button"]').click()
        time.sleep(1)
        self.driver.refresh()


    def select_commodity(self, content):
        """搜索組團商品"""
        # TODO self.content實例屬性傳給下面的方法使用,如果想把值給下面的方法用,添加實例屬性解決
        self.content = content
        self.driver.find_element_by_xpath('//input[@type="text"]').send_keys(content)
        self.driver.find_element_by_xpath('//div[@class="search"]').click()
        self.driver.refresh()
        #return content

    def result(self):
        """判斷搜索商品成功后的提示信息,斷言頁面是否成功"""
        if self.content in self.driver.page_source:
            #print(self.content)
            print('商品搜索成功,測試通過')
        else:
            print('商品搜索錯誤,測試失敗')

    def closed(self):
        """關閉瀏覽器"""
        time.sleep(1)
        self.driver.quit()


def run1():
    # TODO 根據操作順序,調用方法執行
    zt = Zutuan()
    zt.open_zutuan('http://www.zutuan.cn/index.html#/')
    zt.option_element('1489088761@qq.com', 'mg123456')
    zt.select_commodity('香蕉')
    zt.result()
    zt.closed()


class View_details(Zutuan):
    """把商品添加為明星單品,"""
    def check_commodity(self, number):
        """進入商品詳情頁,點擊添加明星單品"""
        self.driver.find_element_by_xpath('//a[@target="_blank"]/img').click()
        self.driver.switch_to.window(self.driver.window_handles[1])
        self.driver.find_element_by_xpath('//div[@class="child start"]').click()
        self.driver.find_element_by_xpath('//div[@class="el-dialog__body"]//input[@type="text"]').send_keys(number)
        self.driver.find_element_by_xpath('//button[@type="button" and @class="el-button el-button--danger"]').click()
        time.sleep(1)

    def result(self):
        """重寫父類方法,判斷商品添加成功后的提示信息,斷言頁面是否成功"""
        if '添加成功' in self.driver.page_source:
            print('商品添加成功,測試通過')
        else:
            print('商品添加失敗,測試失敗')
        # 調用父類方法關閉
        super().closed()


def run2():
    vd = View_details()
    vd.open_zutuan('http://www.zutuan.cn/index.html#/')
    vd.option_element('1489088761@qq.com', 'mg123456')
    vd.select_commodity('蘋果')
    vd.check_commodity(91628)
    vd.result()


def main():
    p1 = multiprocessing.Process(target=run1)
    p2 = multiprocessing.Process(target=run2)

    p1.start()
    p2.start()


if __name__ == '__main__':
    main()


免責聲明!

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



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