有机z中国电影免费观看-友田真希一区二区-亚洲成肉网-亚洲成人自拍偷拍-神马午夜电影一区二区三区在线观看-神马午夜场-日本黄色一级网站-日本黄色一级视频-女优一区-女婴高潮h啪啪-久久久久久久精-久久久久久久极品内射-国产主播av-国产主播99-高清欧美性猛交xxxx-高清欧美性猛交

使用puppeteer實(shí)現(xiàn)瀏覽器自動(dòng)化

Puppeteer 是一個(gè) Node 庫,它提供了一個(gè)高級 API 來通過 DevTools 協(xié)議控制 Chromium 或 Chrome。Puppeteer 默認(rèn)以 headless 模式運(yùn)行,但是可以通過修改配置文件運(yùn)行“有頭”模式。

可以實(shí)現(xiàn)手動(dòng)操作瀏覽器的所有功能

 

生成頁面 PDF。
抓取 SPA(單頁應(yīng)用)并生成預(yù)渲染內(nèi)容(即“SSR”(服務(wù)器端渲染))。
自動(dòng)提交表單,進(jìn)行 UI 測試,鍵盤輸入等。
創(chuàng)建一個(gè)時(shí)時(shí)更新的自動(dòng)化測試環(huán)境。 使用最新的 JavaScript 和瀏覽器功能直接在最新版本的Chrome中執(zhí)行測試。
捕獲網(wǎng)站的 timeline trace,用來幫助分析性能問題。
測試瀏覽器擴(kuò)展。

 

安裝

安裝有瀏覽器的版本

npm i puppeteer

這個(gè)版本自帶Chromium瀏覽器,體積在300多M

2024.1更新

現(xiàn)在默認(rèn)不會(huì)安裝Chromium,如果要安裝,運(yùn)行上述代碼以后,再運(yùn)行"node node_modules\puppeteer\install.js",如果提示沒有install.js,則運(yùn)行"node_modules\puppeteer\install.mjs"

如果電腦有谷歌瀏覽器,可以使用下面代碼

npm i puppeteer-core

 

簡單使用

截圖

(async () => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    //設(shè)置可視區(qū)域大小
    await page.setViewport({width: 1920, height: 800});
    await page.goto('https://youdata.163.com');
    //對整個(gè)頁面截圖
    await page.screenshot({
        path: './files/capture.png',  //圖片保存路徑
        type: 'png',
        fullPage: true //邊滾動(dòng)邊截圖
        // clip: {x: 0, y: 0, width: 1920, height: 800}
    });
    //對頁面某個(gè)元素截圖
    let [element] = await page.$x('/html/body/section[4]/div/div[2]');
    await element.screenshot({
        path: './files/element.png'
    });
    await page.close();
    await browser.close();
})();

 

 

 

模擬用戶登錄

(async () => {
    const browser = await puppeteer.launch({
        slowMo: 100,    //放慢速度
        headless: false,
        defaultViewport: {width: 1440, height: 780},
        ignoreHTTPSErrors: false, //忽略 https 報(bào)錯(cuò)
        args: ['--start-fullscreen'] //全屏打開頁面
    });
    const page = await browser.newPage();
    await page.goto('https://demo.youdata.com');
    //輸入賬號密碼
    const uniqueIdElement = await page.$('#uniqueId');
    await uniqueIdElement.type('admin@admin.com', {delay: 20});
    const passwordElement = await page.$('#password', {delay: 20});
    await passwordElement.type('123456');
    //點(diǎn)擊確定按鈕進(jìn)行登錄
    let okButtonElement = await page.$('#btn-ok');
    //等待頁面跳轉(zhuǎn)完成,一般點(diǎn)擊某個(gè)按鈕需要跳轉(zhuǎn)時(shí),都需要等待 page.waitForNavigation() 執(zhí)行完畢才表示跳轉(zhuǎn)成功
    await Promise.all([
        okButtonElement.click(),
        page.waitForNavigation()  
    ]);
    console.log('admin 登錄成功');
    await page.close();
    await browser.close();
})();

那么 ElementHandle 都提供了哪些操作元素的函數(shù)呢?

elementHandle.click():點(diǎn)擊某個(gè)元素
elementHandle.tap():模擬手指觸摸點(diǎn)擊
elementHandle.focus():聚焦到某個(gè)元素
elementHandle.hover():鼠標(biāo) hover 到某個(gè)元素上
elementHandle.type('hello'):在輸入框輸入文本

 

請求攔截

(async () => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    const blockTypes = new Set(['image', 'media', 'font']);
    await page.setRequestInterception(true); //開啟請求攔截
    page.on('request', request => {
        const type = request.resourceType();
        const shouldBlock = blockTypes.has(type);
        if(shouldBlock){
            //直接阻止請求
            return request.abort();
        }else{
            //對請求重寫
            return request.continue({
                //可以對 url,method,postData,headers 進(jìn)行覆蓋
                headers: Object.assign({}, request.headers(), {
                    'puppeteer-test': 'true'
                })
            });
        }
    });
    await page.goto('https://demo.youdata.com');
    await page.close();
    await browser.close();
})();

那 page 頁面上都提供了哪些事件呢?

page.on('close') 頁面關(guān)閉
page.on('console') console API 被調(diào)用
page.on('error') 頁面出錯(cuò)
page.on('load') 頁面加載完
page.on('request') 收到請求
page.on('requestfailed') 請求失敗
page.on('requestfinished') 請求成功
page.on('response') 收到響應(yīng)
page.on('workercreated') 創(chuàng)建 webWorker
page.on('workerdestroyed') 銷毀 webWorker

 

獲取 WebSocket 響應(yīng)

Puppeteer 目前沒有提供原生的用于處理 WebSocket 的 API 接口,但是我們可以通過更底層的 Chrome DevTool Protocol (CDP) 協(xié)議獲得

(async () => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    //創(chuàng)建 CDP 會(huì)話
    let cdpSession = await page.target().createCDPSession();
    //開啟網(wǎng)絡(luò)調(diào)試,監(jiān)聽 Chrome DevTools Protocol 中 Network 相關(guān)事件
    await cdpSession.send('Network.enable');
    //監(jiān)聽 webSocketFrameReceived 事件,獲取對應(yīng)的數(shù)據(jù)
    cdpSession.on('Network.webSocketFrameReceived', frame => {
        let payloadData = frame.response.payloadData;
        if(payloadData.includes('push:query')){
            //解析payloadData,拿到服務(wù)端推送的數(shù)據(jù)
            let res = JSON.parse(payloadData.match(/\{.*\}/)[0]);
            if(res.code !== 200){
                console.log(`調(diào)用websocket接口出錯(cuò):code=${res.code},message=${res.message}`);
            }else{
                console.log('獲取到websocket接口數(shù)據(jù):', res.result);
            }
        }
    });
    await page.goto('https://netease.youdata.163.com/dash/142161/reportExport?pid=700209493');
    await page.waitForFunction('window.renderdone', {polling: 20});
    await page.close();
    await browser.close();
})();

 

植入 javascript 代碼

Puppeteer 最強(qiáng)大的功能是,你可以在瀏覽器里執(zhí)行任何你想要運(yùn)行的 javascript 代碼,下面是我在爬 188 郵箱的收件箱用戶列表時(shí),發(fā)現(xiàn)每次打開收件箱再關(guān)掉都會(huì)多處一個(gè) iframe 來,隨著打開收件箱的增多,iframe 增多到瀏覽器卡到無法運(yùn)行,所以我在爬蟲代碼里加了刪除無用 iframe 的腳本:

(async () => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.goto('https://webmail.vip.188.com');
    //注冊一個(gè) Node.js 函數(shù),在瀏覽器里運(yùn)行
    await page.exposeFunction('md5', text =>
        crypto.createHash('md5').update(text).digest('hex')
    );
    //通過 page.evaluate 在瀏覽器里執(zhí)行刪除無用的 iframe 代碼
    await page.evaluate(async () =>  {
        let iframes = document.getElementsByTagName('iframe');
        for(let i = 3; i <  iframes.length - 1; i++){
            let iframe = iframes[i];
            if(iframe.name.includes("frameBody")){
                iframe.src = 'about:blank';
                try{
                    iframe.contentWindow.document.write('');
                    iframe.contentWindow.document.clear();
                }catch(e){}
                //把iframe從頁面移除
                iframe.parentNode.removeChild(iframe);
            }
        }
        //在頁面中調(diào)用 Node.js 環(huán)境中的函數(shù)
        const myHash = await window.md5('PUPPETEER');
        console.log(`md5 of ${myString} is ${myHash}`);
    });
    await page.close();
    await browser.close();
})();

page.evaluate(pageFunction[, ...args]):在瀏覽器環(huán)境中執(zhí)行函數(shù)
page.evaluateHandle(pageFunction[, ...args]):在瀏覽器環(huán)境中執(zhí)行函數(shù),返回 JsHandle 對象
page.$$eval(selector, pageFunction[, ...args]):把 selector 對應(yīng)的所有元素傳入到函數(shù)并在瀏覽器環(huán)境執(zhí)行
page.$eval(selector, pageFunction[, ...args]):把 selector 對應(yīng)的第一個(gè)元素傳入到函數(shù)在瀏覽器環(huán)境執(zhí)行
page.evaluateOnNewDocument(pageFunction[, ...args]):創(chuàng)建一個(gè)新的 Document 時(shí)在瀏覽器環(huán)境中執(zhí)行,會(huì)在頁面所有腳本執(zhí)行之前執(zhí)行
page.exposeFunction(name, puppeteerFunction):在 window 對象上注冊一個(gè)函數(shù),這個(gè)函數(shù)在 Node 環(huán)境中執(zhí)行,有機(jī)會(huì)在瀏覽器環(huán)境中調(diào)用 Node.js 相關(guān)函數(shù)庫

 

抓取 iframe 中的元素

一個(gè) Frame 包含了一個(gè)執(zhí)行上下文(Execution Context),我們不能跨 Frame 執(zhí)行函數(shù),一個(gè)頁面中可以有多個(gè) Frame,主要是通過 iframe 標(biāo)簽嵌入的生成的。其中在頁面上的大部分函數(shù)其實(shí)是 page.mainFrame().xx 的一個(gè)簡寫,F(xiàn)rame 是樹狀結(jié)構(gòu),我們可以通過 frame.childFrames() 遍歷到所有的 Frame,如果想在其它 Frame 中執(zhí)行函數(shù)必須獲取到對應(yīng)的 Frame 才能進(jìn)行相應(yīng)的處理

以下是在登錄 188 郵箱時(shí),其登錄窗口其實(shí)是嵌入的一個(gè) iframe,以下代碼時(shí)我們在獲取 iframe 并進(jìn)行登錄

(async () => {
    const browser = await puppeteer.launch({headless: false, slowMo: 50});
    const page = await browser.newPage();
    await page.goto('https://www.188.com');
    //點(diǎn)擊使用密碼登錄
    let passwordLogin = await page.waitForXPath('//*[@id="qcode"]/div/div[2]/a');
    await passwordLogin.click();
    for (const frame of page.mainFrame().childFrames()){
        //根據(jù) url 找到登錄頁面對應(yīng)的 iframe
        if (frame.url().includes('passport.188.com')){
            await frame.type('.dlemail', 'admin@admin.com');
            await frame.type('.dlpwd', '123456');
            await Promise.all([
                frame.click('#dologin'),
                page.waitForNavigation()
            ]);
            break;
        }
    }
    await page.close();
    await browser.close();
})();

文件的上傳和下載

在自動(dòng)化測試中,經(jīng)常會(huì)遇到對于文件的上傳和下載的需求,那么在 Puppeteer 中如何實(shí)現(xiàn)呢?

(async () => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    //通過 CDP 會(huì)話設(shè)置下載路徑
    const cdp = await page.target().createCDPSession();
    await cdp.send('Page.setDownloadBehavior', {
        behavior: 'allow', //允許所有下載請求
        downloadPath: 'path/to/download'  //設(shè)置下載路徑
    });
    //點(diǎn)擊按鈕觸發(fā)下載
    await (await page.waitForSelector('#someButton')).click();
    //等待文件出現(xiàn),輪訓(xùn)判斷文件是否出現(xiàn)
    await waitForFile('path/to/download/filename');

    //上傳時(shí)對應(yīng)的 inputElement 必須是<input>元素
    let inputElement = await page.waitForXPath('//input[@type="file"]');
    await inputElement.uploadFile('/path/to/file');
    browser.close();
})();

 

 

模擬選擇文件

點(diǎn)擊元素觸發(fā)選擇文件框,不會(huì)顯示,直接返回選擇文件

    const [fileChooser] = await Promise.all([
        page.waitForFileChooser(),
        page.click('#mydropzone'), // some button that triggers file selection
    ]);
    await fileChooser.accept(['D:\\down\\tmp.zip']);

 

 

跳轉(zhuǎn)新 tab 頁處理

在點(diǎn)擊一個(gè)按鈕跳轉(zhuǎn)到新的 Tab 頁時(shí)會(huì)新開一個(gè)頁面,這個(gè)時(shí)候我們?nèi)绾潍@取改頁面對應(yīng)的 Page 實(shí)例呢?可以通過監(jiān)聽 Browser 上的 targetcreated 事件來實(shí)現(xiàn),表示有新的頁面創(chuàng)建:

let page = await browser.newPage();
await page.goto(url);
let btn = await page.waitForSelector('#btn');
//在點(diǎn)擊按鈕之前,事先定義一個(gè) Promise,用于返回新 tab 的 Page 對象
const newPagePromise = new Promise(res => 
  browser.once('targetcreated', 
    target => res(target.page())
  )
);
await btn.click();
//點(diǎn)擊按鈕后,等待新tab對象
let newPage = await newPagePromise;

 

 

模擬不同的設(shè)備

Puppeteer 提供了模擬不同設(shè)備的功能,其中 puppeteer.devices 對象上定義很多設(shè)備的配置信息,這些配置信息主要包含 viewport 和 userAgent,然后通過函數(shù) page.emulate 實(shí)現(xiàn)不同設(shè)備的模擬

const puppeteer = require('puppeteer');
const iPhone = puppeteer.devices['iPhone 6'];
puppeteer.launch().then(async browser => {
  const page = await browser.newPage();
  await page.emulate(iPhone);
  await page.goto('https://www.google.com');
  await browser.close();
});

 

其他信息

官方中文文檔

https://zhaoqize.github.io/puppeteer-api-zh_CN/#/

 

THE END
主站蜘蛛池模板: 云南云力机械有限公司| 宁波隆源精密机械有限公司| 济南四通机械有限公司| 江苏福克斯机械有限公司| 江苏久保田农机机械有限公司| 浙江阜康机械有限公司| 东莞正扬电子机械有限公司怎么样| 枣庄金正钢铁有限公司| 广东富华机械装备制造有限公司| 山推重工机械有限公司| 山东西王钢铁有限公司| 诸暨市机械有限公司| 深圳市康铖机械设备有限公司| 浙江海重重工有限公司| 许昌智工机械制造有限公司| 锻压机械工业有限公司| 南通友德机械有限公司| 丹东机械制造有限公司| 天津机械配件有限公司| 上海信烨精密机械有限公司| 重庆自动化机械有限公司| 广州机械自动化有限公司| 浙江金奔机械制造有限公司| 日照 机械工程有限公司| 上海腾迈机械有限公司| 广州化工机械有限公司| 无锡工程机械有限公司| 常州自力化工机械有限公司| 无锡格尔机械有限公司| 新疆丰泰钢铁有限公司| 广西玉柴动力机械有限公司| 苏州典艺精密机械有限公司| 云南德胜钢铁有限公司| 沧州华众煤矿机械有限公司| 山东平安工程机械有限公司| 昆山六丰机械工业有限公司| %南京纺织机械有限公司%| 武汉 机械制造有限公司| 鸿达机械制造有限公司| 中船重工物资有限公司| 江苏润山机械有限公司| 安徽远鸿机械有限公司| 重庆双腾机械制造有限公司| 广州东昻机械有限公司| 绍兴兴鹏机械有限公司| 青岛奥威机械有限公司| 天工工程机械有限公司| 广州日富机械有限公司| 山东山特重工机械有限公司| 宁夏工程机械有限公司| 宁波利豪机械有限公司| 南京聚力化工机械有限公司| 沧州化工机械有限公司| 新乡市先锋振动机械有限公司| 山西中德科工机械制造有限公司| 浙江华球机械制造有限公司| 曼透平机械常州有限公司| 瑞安液压机械有限公司| 广东中泽重工有限公司| 河南省中原起重机械有限公司| 上海陆达包装机械制造有限公司| 江苏润明机械设备有限公司怎么样| 沈阳小松工程机械有限公司| 柏山精密机械有限公司| 西安中天机械有限公司| 杭州 尔机械有限公司| 常州科尧机械有限公司| 天津宏大纺织机械有限公司| 山阳(天津)机械有限公司| 扬州印染机械有限公司| 鼎龙机械制造有限公司| 常州金源机械设备有限公司| 宜兴市机械有限公司| 浙江豪盛印刷机械有限公司| 东台市 机械制造有限公司| 友联机械制造有限公司| 新乡市东源机械有限公司| 山东工程机械有限公司| 郑州华郑机械有限公司| 青岛中华宇塑料机械有限公司| 柳州工程机械有限公司| 山东源鑫农牧机械有限公司| 博山华翔机械制造有限公司| 无锡力马化工机械有限公司| 上海戈扬包装机械有限公司| 新乡正兴机械有限公司| 大众精密机械有限公司| 瑞安瑞一机械有限公司| 深圳市鑫台铭机械设备有限公司| 博思格钢铁苏州有限公司| 泰恒机械制造有限公司| 佛山市宝索机械制造有限公司| 山东同洲机械制造有限公司| 山东机械设备有限公司| 诸城市华钢机械有限公司| 陕西建设机械有限公司| 苏南重工机械有限公司| 威海华丰机械有限公司| 大连包装机械有限公司| 浙江鼎业机械设备有限公司| 宜都大一重工有限公司| 湖州市湖州机械有限公司| 法斯特机械有限公司| 苏州捷合机械有限公司| 杭州正驰达精密机械有限公司| 昆山优能机械有限公司| 福建机械工业有限公司| 潍坊坊通机械有限公司| 江苏鸡煤机械有限公司| 航宇机械设备有限公司| 陕西同力重工有限公司| 重工有限公司 英文| 湖南天雁机械责任有限公司| 青岛建筑机械有限公司| 机械有限公司 英文| 深圳市精诚机械有限公司| 扬州金威机械有限公司| 东莞市茂丰机械有限公司| 苏州海盛精密机械有限公司怎么样| 常州锐展机械有限公司| 唐山天柱钢铁有限公司| 广西玉柴机械有限公司| 东莞志成机械有限公司| 高博起重设备有限公司| 广州明毅机械有限公司| 机械附件制造有限公司| 临沂大阳通用机械有限公司| 上海冉本机械制造有限公司| 南通天成机械有限公司| 佛山市奥索包装机械有限公司| 上海恒启机械设备有限公司| 泰安重工机械有限公司| 温州包装机械有限公司| 上海村田机械有限公司| 石油机械制造有限公司| 东莞通盛机械有限公司| 利勃海尔机械有限公司| 扬州福尔喜果蔬汁机械有限公司| 南京 机械设备有限公司| 三和机械制造有限公司| 东莞恒荣机械有限公司| 机械电设备有限公司| 洛阳中冶重工机械有限公司| 博硕机械制造有限公司| 宁波昌扬机械工业有限公司| 合肥亿恒机械有限公司| 宏机械铸造有限公司| 浙江山海机械有限公司| 四川广鑫粮油机械制造有限公司| 瑞斯机械上海有限公司| 沈阳重工机械有限公司| 昆山 机械 有限公司| 陕西至信机械制造有限公司怎么样| 东莞大兴发机械有限公司| 杭州动力机械有限公司| 西安鸿运机械有限公司| 康铖机械设备有限公司| 苏州毕特富精密机械有限公司| 福建船舶重工有限公司| 唐山港陆钢铁有限公司| 东莞钰腾机械有限公司| 友嘉精密机械有限公司| 浙江临海机械有限公司| 郑州机械贸易有限公司| 永盛机械设备有限公司| 食品机械(上海)有限公司| 广东三浦重工有限公司| 成都弘林机械有限公司| 郴州粮油机械有限公司| 浙江欧耀机械有限公司| 安徽博行机械有限公司| 津路钢铁实业有限公司| 锦州万得机械有限公司| 德莱赛机械苏州有限公司| 华泰精密机械有限公司| 鼎昌机械设备有限公司| 河北晓进机械制造有限公司| 安徽唐兴机械装备有限公司| 济宁通佳机械有限公司| 德州宝鼎液压机械有限公司| 河南 机械有限公司| 上海映易包装机械设备有限公司| 卓郎智能机械有限公司| 杭州中亚机械 有限公司| 河南森源重工有限公司| 洛阳矿山机械有限公司| 佛山隆机械有限公司| 一鸣机械设备有限公司| 鹤壁矿山机械有限公司| 佛山星光传动机械有限公司| 安徽普源分离机械制造有限公司| 东莞市东机械设备有限公司| 温州宇英机械有限公司| 威图电子机械有限公司| 青岛辉特重工有限公司| 三星重工业宁波有限公司| 江苏方邦机械有限公司| 佛山创宝包装机械有限公司| 浙江兄弟包装机械有限公司| 东营程祥机械有限公司| 洗涤机械制造有限公司| 百德机械设备有限公司| 常州万高机械制造有限公司| 武汉食品机械有限公司| 南京创力传动机械有限公司| 环保机械工程有限公司| 河南三星机械有限公司| 苏州市恒升机械有限公司| 山东巨明机械有限公司| 大连-友机械有限公司| 长春协展机械工业有限公司| 常州双鸟起重机械有限公司| 江苏昆仑钢铁有限公司| 湖北铁正机械有限公司| 平煤机械制造有限公司| 杭叉工程机械有限公司| 潍坊元鸣机械有限公司| 德农农业机械有限公司| 五洲机械制造有限公司| 广东力源液压机械有限公司| 泰安嘉和重工机械有限公司| 祥鼎机械设备有限公司| 远大机械设备有限公司| 济南鑫聚德机械有限公司| 泰州海光机械有限公司| 京华机械设备有限公司| 广州市汇格机械设备有限公司| 合肥市春晖机械制造有限公司| 鸿河机械制造有限公司| 山东泗水泰峰面粉机械有限公司| 台州 机械有限公司| 安宁市永昌钢铁有限公司| 佐竹机械苏州有限公司| 东莞大兴发机械有限公司| 安丘机械制造有限公司| 群峰机械制造有限公司| 莱州聚峰机械有限公司| 沈阳三重机械有限公司| 福州优利机械有限公司| 嘉泰数控机械有限公司| 上海开隆冶金机械制造有限公司| 浙江佑天元包装机械制造有限公司| 苏州辽鞍机械有限公司| 湖南信昌机械有限公司| 河南朝阳钢铁有限公司| 佛山科力机械有限公司| 上海汉普机械有限公司| 泰兴液压机械有限公司| 锦州俏牌机械有限公司| 泉州精镁机械有限公司| 苏州捷合机械有限公司| 上海宇精密机械有限公司| 荆州华力机械有限公司| 益阳中源钢铁有限公司| 上海 机械有限公司| 一本机械设备有限公司| 濮阳崛起装饰有限公司| 浙江开诚机械有限公司| 沈阳 机械设备有限公司| 上海敏硕机械配件有限公司| 众力机械制造有限公司| 江苏聚丰园林机械有限公司| 昆山尚亦精密机械有限公司| 河南兴远起重机有限公司| 苏州食品机械有限公司| 北仑精密机械有限公司| 广州易鸿机械有限公司| 台州博州机械有限公司| 苏州君驰联动机械有限公司| 温州利波机械有限公司| 常熟市机械有限公司| 新乡 筛分机械有限公司| 焦作市虹起制动器有限公司| 河南东盈机械设备有限公司| 宁波梦神床垫机械有限公司| 江阴市洪腾机械有限公司| 江苏大津重工有限公司| 中山市机械有限公司| 兖矿东华重工有限公司| 振华真空机械有限公司| 杭州驰丰机械有限公司| 青岛山森机械有限公司| 东莞市 机械有限公司| 河北太行机械工业有限公司| 流遍机械润滑有限公司| 瑞安市机械有限公司| 杭州亿安机械设备有限公司| 无锡英那威特机械发展有限公司| 青岛美克精密机械有限公司| 河北敬业钢铁有限公司| 宝鸡至信机械有限公司| 东风井关农业机械有限公司| 日发纺织机械有限公司| 威海欧东机械有限公司| 上海玖钲机械设备有限公司| 利星行机械有限公司| 纽科伦新乡起重机有限公司| 襄阳博亚机械有限公司| 浙江威泰机械有限公司| 泰安机械有限公司招聘| 鸿河机械制造有限公司| 东莞市森佳机械有限公司| 洛阳福格森机械装备有限公司| 三和机械制造有限公司| 柳州中源机械有限公司| 克朗斯机械有限公司| 贝特工程机械有限公司| 上海皆力机械设备有限公司| 天津海特传动机械有限公司| 重庆远风机械有限公司| 德瑞机械设备有限公司| 立信纺织机械有限公司| 山东泰峰起重设备制造有限公司| 腾达机械设备有限公司| 诺德传动机械有限公司| 苏州重工有限公司招聘| 海门亿峰机械有限公司| 东莞%机械制造有限公司| 设备机械制造有限公司| 长沙精密机械有限公司| 山东矿山机械有限公司| 河南千里马工程机械有限公司| 上海清河机械有限公司| 上海起重设备有限公司| 浙江园林机械有限公司| 华兴五金机械有限公司| 泰州市机械制造有限公司| 宜兴永康机械有限公司| 如东通用机械有限公司| 南兴机械设备有限公司| 马长江钢铁有限公司| 上海三久机械有限公司| 临沂建业机械有限公司| 江苏佳成机械有限公司| 济宁天鸿机械有限公司| 无锡前洲兴华机械有限公司| 杭州精密机械有限公司招聘| 济南东泰机械有限公司| 浙江茶叶机械有限公司| 海南机械制造有限公司| 东莞市浈颖机械设备有限公司| 成都万欣邦达机械制造有限公司| 东莞市科环机械设备有限公司| 山推楚天工程机械有限公司| 太重滨海重型机械有限公司| 济南威力机械有限公司| 佛山兴发机械有限公司| 连云港机械有限公司| 石家庄聚力特机械有限公司| 辽宁重工机械有限公司| 佛山机械设备有限公司| 营口隆仁重工有限公司| 瑞安市天晟包装机械有限公司| 永盛机械设备有限公司| 萨瑟克机械有限公司| 奥德机械设备有限公司| 机械化工程有限公司| 大方起重机器有限公司| 广州机械配件有限公司| 山东金亿机械有限公司| 张家港机械设备有限公司| 宁波星箭航天机械有限公司| 瑞达机械制造有限公司| 山东鑫鑫机械有限公司| 宁波床垫机械有限公司| 食品机械制造有限公司| 厦门大禾众邦机械有限公司| 重庆海松机械有限公司| 佛山市松川包装机械有限公司| 金瑞机械制造有限公司| 钻通工程机械有限公司| 韶关新宇机械有限公司| 山东明沃机械有限公司| 沈阳顺达重矿机械制造有限公司| 杭州杭重机械有限公司| 河北机械设备制造有限公司| 圣伟精密机械有限公司| 东莞市途锐机械有限公司| 昆山施耐特机械有限公司| 佛山市鹏轩机械制造有限公司| 平湖德实机械有限公司| 郑州山川重工有限公司| 东莞市瑞沧机械设备有限公司| 江阴市药化机械有限公司| 成都望锦机械有限公司| 福建海龙机械有限公司| 运达机械制造有限公司| 宁波裕民机械工业有限公司| 广州科盛隆纸箱包装机械有限公司| 东莞木工机械有限公司| 上海昶旭包装机械有限公司| 雄克精密机械有限公司| 卓郎智能机械有限公司| 南通精密机械有限公司| 广州力净洗涤机械有限公司| 山东兴田机械有限公司| 正扬电子机械有限公司| 苏州爱德克精密机械有限公司| 上海兴享机械工业有限公司| 上海上丰机械有限公司| 常州创领机械有限公司| 中联恒通机械有限公司| 无锡万华机械有限公司| 山东威曼机械有限公司| 华晨机械制造有限公司| 江阴市江顺机械有限公司| 中山市信元铝门窗机械制造有限公司| 郑州重工机械有限公司| 江苏龙威机械有限公司| 淮安机械设备有限公司| 友盛精密机械有限公司| 安徽建筑机械有限公司| 广东力丰机械制造有限公司| 莱德沃起重机械有限公司| 抚顺机械设备制造有限公司| 昆山市众捷塑料机械有限公司| 浙江雷克机械工业有限公司| 锻压机械工业有限公司| 台州特特机械有限公司| 武汉船舶重工有限公司| 江阴宗承钢铁有限公司| 宁波昌源机械有限公司| 上海 精密机械有限公司| 青岛武船重工有限公司| 鹰普机械宜兴有限公司| 辽宁重工机械有限公司| 重庆庆达机械有限公司| 镇江重工机械有限公司| 常州华机械有限公司| 秦皇岛宏兴钢铁有限公司| 上海航发机械有限公司| 强江机械制造有限公司| 昆山 环保机械有限公司| 北京京西重工有限公司| 德昌机械制造有限公司| 上海冠龙阀门机械有限公司官网| 京山力拓机械有限公司| 小松常州工程机械有限公司| 市鑫宏机械制造有限公司| 佳速精密机械有限公司| 东莞塑胶机械有限公司| 上海 机械设备有限公司| 河南省力神机械有限公司| 山东液压机械有限公司| 宁波健信机械有限公司| 双鹤机械制造有限公司| 合肥工程机械有限公司| 动机械设备有限公司| 临沂江鑫钢铁有限公司| 山东运泰机械有限公司| 汕头机械厂有限公司| 常德三一机械有限公司| 衡水机械制造有限公司| 上海楚尚机械有限公司| 上海星贝包装机械有限公司| 青岛联瑞精密机械有限公司| 温州华印机械有限公司| 广州通泽机械有限公司| 宁波食品机械有限公司| 济南市恒宇机械有限公司| 苏州朗维纺织机械有限公司| 青岛德尔德机械有限公司| 银丰弹簧机械设备制造有限公司| 禹城 机械 有限公司| 液压机械制造有限公司| 无锡市锡恒机械有限公司| 大连德机械有限公司| 山东博远重工有限公司| 临汾市机械有限公司| 三星机械制造有限公司| 聊城 机械有限公司| 常州都可机械有限公司| 常熟众达机械有限公司| 湖州机械制造有限公司| 河北天冠环保机械有限公司| 建科机械天津有限公司| 金韦尔机械有限公司| 浙江德玛克机械有限公司| 山东强机械有限公司| 常州市港口机械有限公司| 苏州化工机械有限公司| 山东建工机械有限公司| 河北澳金机械设备有限公司| 安丘博阳机械制造有限公司| 广州市 机械有限公司| 科尼起重机设备(上海)有限公司| 杭州旭众机械设备有限公司| 河南正大机械有限公司| 河南矿山起重机有限公司销售电话| 万通通机械制造有限公司| 泰安嘉诚机械有限公司| 聚源机械有限公司招聘| 青岛凯机械有限公司| 江苏联顺机械有限公司| 小松常州工程机械有限公司| 瑞安市瑞博机械有限公司| 申克上海机械有限公司| 辽阳腾龙钢铁有限公司| 东莞市世翔精密机械制造有限公司| 雄克精密机械有限公司| 绍兴三纺机械有限公司| 常州儒邦机械有限公司| 常州日月机械有限公司| 南通农业机械有限公司| 济南迅捷机械设备有限公司| 洛阳建筑机械有限公司| 派克包装机械有限公司| 宁波永博机械制造有限公司| 上海翔展机械有限公司| 绵阳新晨动力机械有限公司| 贝斯特机械有限公司| 威海华东重工有限公司| 上海大侨机械有限公司| 常州宝菱重工机械有限公司| 湖北天腾重型机械制造有限公司| 广东省建筑工程机械施工有限公司| 沧州重型机械有限公司| 上海全众机械有限公司| 大方起重机械有限公司| 济南市恒宇机械有限公司| 江苏新技机械有限公司| 武汉船用机械有限公司| 玛顿重工太仓有限公司| 中海福陆重工有限公司| 营口京华钢铁有限公司招聘| 上海力净洗涤机械制造有限公司| 晶元精密机械有限公司| 安徽同铸工程机械有限公司| 河北明芳钢铁有限公司| 联德机械杭州有限公司| 苏州敏喆机械有限公司| 杭州机械设备有限公司| 广州广重分离机械有限公司| 阳煤化机械有限公司| 沈阳木工机械有限公司| 青岛青科重工有限公司| 台正精密机械有限公司| 青岛欧普机械设备有限公司| 安庆恒昌机械有限公司| 扬州文轩钢铁有限公司| 上海沪工起重机械有限公司| 沈阳恒力机械有限公司| 威图电子机械有限公司| 福建巨霸机械有限公司| 温州新派机械有限公司| 江苏宏博机械制造有限公司| 江苏竣业过程机械设备有限公司| 德瑞机械设备有限公司| 无锡胜麦机械有限公司| 上海伯曼机械制造有限公司| 江苏环海重工有限公司| 山东金亿机械有限公司| 设备机械制造有限公司| 福建新源重工有限公司| 徐州凯工机械有限公司| 济南泽机械有限公司| 泰而勒食品机械贸易(上海)有限公司| 常熟 机械 有限公司| 武汉东泰机械有限公司| 常州杰和机械有限公司| 常州凯豪机械有限公司| 苏州国械机械有限公司| 华东造纸机械有限公司| 山东大汉建设机械有限公司| 注册机械设备有限公司有什么要求| 宁波海雄塑料机械有限公司| 泽顺机械制造有限公司| 湖南金峰机械有限公司| 锦辉五金机械有限公司| 鸿泰机械设备有限公司| 济宁华珠机械有限公司| 合肥浩凯机械有限公司| 大连华威机械有限公司| 上海陆达包装机械制造有限公司| 山东重型机械有限公司| 平煤机械设备有限公司| 上海力净洗涤机械制造有限公司| 农业机械装备有限公司| 杭州双林机械有限公司| 杭州输送机械有限公司| 临沂金盛机械配套有限公司| 泰鼎机械制造有限公司| 东莞市兆恒机械有限公司| 徐州丰展机械有限公司| 广东南牧机械设备有限公司| 广州伟基机械有限公司| 广州起重机械有限公司| 山东新船重工有限公司| 上海冬松精密机械有限公司| 浙江美华包装机械有限公司| 上海德仁橡塑机械有限公司| 大连正丰机械有限公司| 安徽宇华机械制造有限公司| 工程机械制造有限公司| 德莱赛机械有限公司| 海精密机械有限公司| 上海机械进出口有限公司| 三川德青工程机械有限公司| 九江%机械有限公司| 宝钢盐城钢铁有限公司| 上海青川机械配件有限公司| 浙江万龙机械有限公司| 章丘宇龙机械有限公司| 台州瑞达机械有限公司| 浙江液压机械有限公司| 山东木业机械有限公司| 烟台鼎科机械有限公司| 东莞市今塑精密机械有限公司| 德亿机械设备有限公司| 郑州长宏机械制造有限公司| 河北实阳机械有限公司| 济南威力机械有限公司| 湖州汇大机械有限公司| 天津市钢铁贸易有限公司| 电力机械制造有限公司| 三鼎机械制造有限公司| 江阴方圆机械有限公司| 亚盛工程机械有限公司| 恒基矿山机械有限公司| 鑫宏机械制造有限公司| 兴业机械设备有限公司| 好利旺机械有限公司| 焦作市机械有限公司| 河北太行机械工业有限公司| 温州正雄机械有限公司| 杭州化工机械有限公司| 南京力同重工机械有限公司| 远大机械制造有限公司| 唐山松汀钢铁有限公司| 青岛液压机械有限公司| 养殖有限公司起名大全| 广东机械设备有限公司| 杭州冠浩机械设备有限公司| 展鸿机械有限公司招聘| 温州惠利机械有限公司| 佛山三技精密机械有限公司| 西安 工程机械有限公司| 浙江晨雕机械有限公司| 浙江起步儿童用品有限公司| 大连起重机有限公司| 曲阜润丰机械有限公司| 沧州昌鸿磨浆机械有限公司| 苏州动力机械有限公司| 宁波五峰机械有限公司| 广州德晟机械有限公司| 南通福斯特机械制造有限公司| 广州竞和机械有限公司| 南通奥普机械有限公司| 东莞 精密机械有限公司| 温州市机械有限公司| 江苏韩通重工有限公司| 徐州起重机械有限公司| 东莞市 机械有限公司| 咸阳机械设备有限公司| 食品机械设备有限公司| 马鞍山市冶金机械有限公司| 深圳市机械设备有限公司| 辽宁富一机械有限公司| 武汉瑞威特机械有限公司| 广州机械设备租赁有限公司| 成都弘林机械有限公司| 三和水工机械有限公司| 广西金达机械有限公司| 定州市至信机械制造有限公司| 浙江康明斯机械有限公司|