蜜臀久久99精品久久一区二区_激情五月俺来也_丰满少妇熟乱xxxxx视频_黄色国产一级片_少妇放荡的呻吟干柴烈火动漫_久久爱www_亚洲一欧美日b_日韩av动漫_成人在线免费高清视频_日韩码一码二码三码区别69_狠狠撸狠狠操_中文字幕在线导航_欧美在线网_黄色网址中文字幕_午夜xx_国产成人无码专区_亚洲中亚洲中文字幕无线乱码_欧美精品片_欧美一级视频_日韩精品激情

使用puppeteer實現瀏覽器自動化

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

可以實現手動操作瀏覽器的所有功能

 

生成頁面 PDF。
抓取 SPA(單頁應用)并生成預渲染內容(即“SSR”(服務器端渲染))。
自動提交表單,進行 UI 測試,鍵盤輸入等。
創建一個時時更新的自動化測試環境。 使用最新的 JavaScript 和瀏覽器功能直接在最新版本的Chrome中執行測試。
捕獲網站的 timeline trace,用來幫助分析性能問題。
測試瀏覽器擴展。

 

安裝

安裝有瀏覽器的版本

npm i puppeteer

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

2024.1更新

現在默認不會安裝Chromium,如果要安裝,運行上述代碼以后,再運行"node node_modules\puppeteer\install.js",如果提示沒有install.js,則運行"node_modules\puppeteer\install.mjs"

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

npm i puppeteer-core

 

簡單使用

截圖

(async () => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    //設置可視區域大小
    await page.setViewport({width: 1920, height: 800});
    await page.goto('https://youdata.163.com');
    //對整個頁面截圖
    await page.screenshot({
        path: './files/capture.png',  //圖片保存路徑
        type: 'png',
        fullPage: true //邊滾動邊截圖
        // clip: {x: 0, y: 0, width: 1920, height: 800}
    });
    //對頁面某個元素截圖
    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 報錯
        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');
    //點擊確定按鈕進行登錄
    let okButtonElement = await page.$('#btn-ok');
    //等待頁面跳轉完成,一般點擊某個按鈕需要跳轉時,都需要等待 page.waitForNavigation() 執行完畢才表示跳轉成功
    await Promise.all([
        okButtonElement.click(),
        page.waitForNavigation()  
    ]);
    console.log('admin 登錄成功');
    await page.close();
    await browser.close();
})();

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

elementHandle.click():點擊某個元素
elementHandle.tap():模擬手指觸摸點擊
elementHandle.focus():聚焦到某個元素
elementHandle.hover():鼠標 hover 到某個元素上
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 進行覆蓋
                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') 頁面關閉
page.on('console') console API 被調用
page.on('error') 頁面出錯
page.on('load') 頁面加載完
page.on('request') 收到請求
page.on('requestfailed') 請求失敗
page.on('requestfinished') 請求成功
page.on('response') 收到響應
page.on('workercreated') 創建 webWorker
page.on('workerdestroyed') 銷毀 webWorker

 

獲取 WebSocket 響應

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

(async () => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    //創建 CDP 會話
    let cdpSession = await page.target().createCDPSession();
    //開啟網絡調試,監聽 Chrome DevTools Protocol 中 Network 相關事件
    await cdpSession.send('Network.enable');
    //監聽 webSocketFrameReceived 事件,獲取對應的數據
    cdpSession.on('Network.webSocketFrameReceived', frame => {
        let payloadData = frame.response.payloadData;
        if(payloadData.includes('push:query')){
            //解析payloadData,拿到服務端推送的數據
            let res = JSON.parse(payloadData.match(/\{.*\}/)[0]);
            if(res.code !== 200){
                console.log(`調用websocket接口出錯:code=${res.code},message=${res.message}`);
            }else{
                console.log('獲取到websocket接口數據:', 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 最強大的功能是,你可以在瀏覽器里執行任何你想要運行的 javascript 代碼,下面是我在爬 188 郵箱的收件箱用戶列表時,發現每次打開收件箱再關掉都會多處一個 iframe 來,隨著打開收件箱的增多,iframe 增多到瀏覽器卡到無法運行,所以我在爬蟲代碼里加了刪除無用 iframe 的腳本:

(async () => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.goto('https://webmail.vip.188.com');
    //注冊一個 Node.js 函數,在瀏覽器里運行
    await page.exposeFunction('md5', text =>
        crypto.createHash('md5').update(text).digest('hex')
    );
    //通過 page.evaluate 在瀏覽器里執行刪除無用的 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);
            }
        }
        //在頁面中調用 Node.js 環境中的函數
        const myHash = await window.md5('PUPPETEER');
        console.log(`md5 of ${myString} is ${myHash}`);
    });
    await page.close();
    await browser.close();
})();

page.evaluate(pageFunction[, ...args]):在瀏覽器環境中執行函數
page.evaluateHandle(pageFunction[, ...args]):在瀏覽器環境中執行函數,返回 JsHandle 對象
page.$$eval(selector, pageFunction[, ...args]):把 selector 對應的所有元素傳入到函數并在瀏覽器環境執行
page.$eval(selector, pageFunction[, ...args]):把 selector 對應的第一個元素傳入到函數在瀏覽器環境執行
page.evaluateOnNewDocument(pageFunction[, ...args]):創建一個新的 Document 時在瀏覽器環境中執行,會在頁面所有腳本執行之前執行
page.exposeFunction(name, puppeteerFunction):在 window 對象上注冊一個函數,這個函數在 Node 環境中執行,有機會在瀏覽器環境中調用 Node.js 相關函數庫

 

抓取 iframe 中的元素

一個 Frame 包含了一個執行上下文(Execution Context),我們不能跨 Frame 執行函數,一個頁面中可以有多個 Frame,主要是通過 iframe 標簽嵌入的生成的。其中在頁面上的大部分函數其實是 page.mainFrame().xx 的一個簡寫,Frame 是樹狀結構,我們可以通過 frame.childFrames() 遍歷到所有的 Frame,如果想在其它 Frame 中執行函數必須獲取到對應的 Frame 才能進行相應的處理

以下是在登錄 188 郵箱時,其登錄窗口其實是嵌入的一個 iframe,以下代碼時我們在獲取 iframe 并進行登錄

(async () => {
    const browser = await puppeteer.launch({headless: false, slowMo: 50});
    const page = await browser.newPage();
    await page.goto('https://www.188.com');
    //點擊使用密碼登錄
    let passwordLogin = await page.waitForXPath('//*[@id="qcode"]/div/div[2]/a');
    await passwordLogin.click();
    for (const frame of page.mainFrame().childFrames()){
        //根據 url 找到登錄頁面對應的 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();
})();

文件的上傳和下載

在自動化測試中,經常會遇到對于文件的上傳和下載的需求,那么在 Puppeteer 中如何實現呢?

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

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

 

 

模擬選擇文件

點擊元素觸發選擇文件框,不會顯示,直接返回選擇文件

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

 

 

跳轉新 tab 頁處理

在點擊一個按鈕跳轉到新的 Tab 頁時會新開一個頁面,這個時候我們如何獲取改頁面對應的 Page 實例呢?可以通過監聽 Browser 上的 targetcreated 事件來實現,表示有新的頁面創建:

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

 

 

模擬不同的設備

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

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
主站蜘蛛池模板: 安琪酵母(伊犁)有限公司| 深圳赛龙通信技术有限公司| 河南日立信有限公司| 奥比机电嘉兴有限公司| 郑州包装机械设备有限公司| 杨协成食品有限公司| 惠民城电器有限公司| 中山美扬电器有限公司| 北京达飞安评有限公司| 常熟华润电力有限公司| 奥星制药装备有限公司| 延锋汽车模具有限公司| 中庆现代技术有限公司| 上海丰科生物有限公司| 宏祥机械制造有限公司| 恩斯克转向器有限公司| 华东钢结构有限公司| 荣成远洋渔业有限公司| 深圳生普贸易有限公司| 浙江山蒲照明有限公司| 和米有限公司怎么样| 哈尔滨派斯菲科生物有限公司| 深圳爱迪尔珠宝有限公司| 品联激光技术有限公司| 广州水电建设工程有限公司| 江苏恒江包装有限公司| 佛山市石油化工有限公司 | 科龙空调器有限公司| 东莞市捷成有限公司| 南宁交通轨道有限公司| 江苏天地钢有限公司| 广州 金属建材有限公司| 佳能(苏州)有限公司地址| 巨能天然气有限公司| 佛山市南 电器有限公司| 天创电子有限公司怎么样| 郑州电力工程设计有限公司| 深圳云端时代有限公司| 卡尔蔡司(上海)有限公司| 汉唐国际贸易有限公司| 福建 润滑油 有限公司| 承德绿色食品有限公司| 上海展迅实业有限公司| 惠州tcl 移动通信有限公司| 中轻物产化工有限公司| 劳雷(北京)仪器有限公司| 华苏国际贸易有限公司| 智诚信息技术有限公司| 杭州百草味有限公司| 上海三爱富新材料有限公司| 番禺五金制品有限公司| 一本机械设备有限公司| 兴能源(天津)有限公司| 长春 窗业 有限公司| 广东新创意有限公司| 佰诗的贸易有限公司| tcl王牌电器(成都)有限公司| 武汉中核仪表有限公司| 天宇包装材料有限公司| 上海宝康电子有限公司| 欧蓓莎置业有限公司| 上海影音设备有限公司| 北斗星机械有限公司| 深圳德浩电子有限公司| 大连凯飞化学有限公司| 上海福基食品有限公司| 江苏井神盐化有限公司| 东莞东正机械有限公司| 禹华通信技术有限公司| 郑州水电安装有限公司| 博美(北京)玻璃有限公司| 实业发展有限公司 戴| 摩根轧机 上海 有限公司| 上海餐具消毒有限公司| 泰州雅马哈动力有限公司| 扬州 仪征 有限公司| 九江环保设备有限公司| 四会市染整有限公司| 得而达水龙头有限公司| 联兴金属制品有限公司| 漳州经济发展有限公司| 钱友信息技术有限公司| 新兴县厨具有限公司| 博科电子技术有限公司| 石家庄通合电子有限公司| 成龙威专用汽车有限公司| 丰合国际贸易有限公司| 哈尔滨干燥设备制造有限公司| 和记黄埔地产上海有限公司| 上海欧是时装有限公司| 国泰精密机件 无锡 有限公司| 陕西华星电子有限公司| 宏达信息技术有限公司| 北京威特空间有限公司| 长沙盛隆机械有限公司| 上海肉制品有限公司| 亿企通信息技术有限公司| 汉嘉建筑设计有限公司| 首屏信息技术有限公司| 成都麦科瑞迪有限公司| 顺德运动器材有限公司| 美怡乐食品有限公司| 吉林正和药业有限公司| 上海亚创工程技术有限公司| 西安庆安制冷有限公司| 昆山舒美仪器有限公司| 江苏有限公司 江阴分公司| 深圳市业展电子有限公司| 山东嘉华有限公司怎么样| 广州俊羽服饰有限公司| 福建华建筑工程有限公司| 天津电子衡器有限公司| 华亚(芜湖)塑胶有限公司| 德恩科电机有限公司| 成都母婴用品有限公司| 广东精密机械有限公司招聘| 山东建设安装有限公司| 清新环境技术有限公司| 深圳龙赛通信技术有限公司| 隆众信息技术有限公司| 芯海微电子有限公司| 广西丰浩糖业有限公司| 联通达深圳有限公司| 东阳市杯业有限公司| 立昂微电子有限公司| 广东塑料制品有限公司| 恒安心相印纸制品有限公司 | 五行材料江苏有限公司| 三星数据西安有限公司| 散热器配件有限公司| 光明荷斯坦牧业有限公司| 农鑫林牧发展有限公司| 建贸新科建材有限公司| 松下电气机器有限公司| 江苏中森建筑设计有限公司| 广州力欧服饰有限公司| 天津品方食品有限公司| 江苏天地钢有限公司| 江门市江丰食品有限公司| 宏运装饰工程有限公司| 永志高电子有限公司| 无锡众鑫模具有限公司| 中信渤海铝业有限公司| 纬立资讯配件有限公司| 广东广州机械有限公司| 久保田农业机械 苏州 有限公司| 国电光伏江苏有限公司| 深圳市鑫美实业有限公司| 四川天宇劳务有限公司| 蓝海进出口有限公司| 常州机电安装有限公司| 纳特通信电子有限公司| 北京科园信海医药有限公司| 重庆芸峰实业有限公司| 广州微冠信息有限公司| 比德文电动车有限公司| 苏州液压机械有限公司| 天弘电子(上海)有限公司| 纳新塑化(上海)有限公司| 雷克工程机械有限公司| 深圳电子精品有限公司| 华灏建筑设计有限公司| 新疆浩通医疗有限公司| 深圳航天物业有限公司| 广州莎丽皮具有限公司| 成都大药房连锁有限公司| 中山市创康食品有限公司| 兴通装饰有限公司招聘| 浙森装饰工程有限公司| 翰锦(上海)有限公司| 中宏建建设有限公司| 南京空压机有限公司| 菲仕兰食品贸易有限公司| 金路交通工程有限公司| 北京 齿轮有限公司| 山东蓝帆材料有限公司| 东芝泰格信息系统深圳有限公司 | 浙江皇马化工有限公司| 诚信会计事务有限公司| 济宁电力工程有限公司| 华联汽车零部件有限公司| 新疆电力设备有限公司| 佩特化工(上海)有限公司| 立讯精密工业昆山有限公司| 浙江蓝天园林有限公司| 杭州特种泵业有限公司| 深圳隆科电子有限公司| 中石化中海船舶燃料供应有限公司| 洛阳洛北机械有限公司| 亚新科美联制动系统有限公司| 高信化玻仪器有限公司| 深圳鑫鹏达有限公司| 内蒙古蒙古王酒业有限公司| 深圳英利能源有限公司| 比德文电动车有限公司| 济南四机数控有限公司| 天津中航工业有限公司| 广东建筑材料有限公司| 力威液压机械有限公司| 新华菱文具制造有限公司| 威德福设备有限公司| 天津罗姆电子有限公司| 南瑞工程设计有限公司| 敬鹏电子(常熟)有限公司| 首创装饰工程有限公司| 河南互联网有限公司| 北京中钞钞券设计制版有限公司| 威兰阀门苏州有限公司| 苏州 商场有限公司| 兰州天然气有限公司| 京豪信息技术有限公司| 莱提电气(上海)有限公司| 恒浩建筑工程有限公司| 苏州明基电子有限公司| 东莞誉荣衣架有限公司| 苏州盛诠纸业有限公司| 冠嘉(上海)服饰有限公司| 盘锦 红 有限公司| 牧东光电(苏州)有限公司| 莆田 财务 有限公司| 埃梯梯南京有限公司| 广州给力信息技术有限公司| 正大食品洛阳有限公司| 住友电工电子制品有限公司| 深圳饮料贸易有限公司| 江苏江禹建设工程有限公司| 深圳主力实业有限公司| 上海信谊制药有限公司| 上海通一水泵有限公司| 马氏庄园食品有限公司| 蓄电池设备有限公司| 亿阳信通信息技术有限公司| 奥克化学(扬州)有限公司| 青州石油机械有限公司| 揭阳市泰不锈钢有限公司| 苏州吸尘器有限公司| 创华机械设备有限公司| 南通 码头有限公司| 成都货物运输有限公司| 顺嘉塑胶制品有限公司| 安庆帝伯茨活塞环有限公司| 云南绿辣素有限公司| 奥智品光学仪器有限公司| 0312 有限公司| 张家港酒店有限公司| 三夫户外用品有限公司| 广州蝶恋花有限公司| 海南南国健康产业有限公司| 上海东 环境工程有限公司| 湛江 餐饮有限公司| 德正艺术品有限公司| 山东核电有限公司 电话| 易买得超市有限公司| 品韵装饰工程有限公司| 上海真空泵厂 有限公司| 希艺欧家居用品有限公司| 上海谱尼测试有限公司| 昆山立讯精密工业有限公司| 深圳市聚鑫光电有限公司| 深圳东微电子有限公司| 上海干细胞技术有限公司| 顺德包装机械有限公司| 深圳森源实业有限公司| 华鲁电热仪器有限公司| 凯源电力工程有限公司| 有限公司转独资公司| 星光树脂昆山有限公司| 许昌元化生物有限公司| 爱普斯元器件有限公司| 三菱电机电梯有限公司| 展濠国际货运有限公司| 电节能设备有限公司| 江苏海四达电源有限公司| 东莞东尼仪器有限公司| 锦州有限塑料制品有限公司| 网展上海有限公司怎么样 | 中景建筑设计院有限公司| 东州通信设备有限公司| 上海真空泵厂 有限公司| 山东省泰化工有限公司| 唐山汽车零部件有限公司| 北京奇虎360有限公司| 苏州东风汽车有限公司| 亿达利电子有限公司| 爱普迪光通讯有限公司| 宁波永佳工具有限公司| 广州市金属回收有限公司| 万安汽车配件有限公司| 青岛盛德食品有限公司| 高信化玻仪器有限公司| 华海消防安装有限公司| 广西凉亭禽业有限公司| 南方大厦 有限公司| 葛兰素史克制药有限公司| 金润建设工程有限公司| 武汉青江化工有限公司| 京瓷连接器有限公司| 曲靖市食品有限公司| 顺源国际贸易有限公司| 威时沛运货运有限公司| 普天天纪楼宇智能有限公司| 大连凯洋食品有限公司| 广东天安监理有限公司| 海天塑料机械有限公司| 劲达技术 河源 有限公司| 广东邦民制药有限公司| 环旭电子(深圳)有限公司| 深圳铭丰电子有限公司| 重庆优比家具有限公司| 嘉利国际贸易有限公司| 西门子工程制造中心有限公司| 江阴市龙橡塑有限公司| 合肥太古可乐有限公司| 深圳市森创电子有限公司| 福特继电器有限公司| 奥可利昆山有限公司| 厦门电线电缆有限公司| 上海信谊制药有限公司| 潍坊电子技术有限公司| 江西百神药业有限公司| 中山日塑电子有限公司| 深圳美盛电子有限公司| 广东酒店用品有限公司| 无锡及恩电气有限公司| 佛山御品食品有限公司| 华拓自动化有限公司| 苏州体育发展有限公司| 鼎泰国际贸易有限公司| 国储能源化工有限公司| 吉林百姓药业有限公司| 胜斐迩仓储系统有限公司| 宁靖盐高速公路有限公司| 新沂市机械有限公司| 旭光聚合物有限公司| 扬州市管件有限公司| 深圳市贤贸易有限公司| 合肥市消防有限公司| 西安庆安制冷有限公司| 佛山御品食品有限公司| 奔达康电缆有限公司| 福建电子工业有限公司| 雄邦压铸(南通)有限公司| 盛隆钢结构有限公司| 上海 派遣人才有限公司| 国泰精密机件无锡有限公司| 优才创智有限公司成都| 海龙王泵业有限公司| 船用厨房设备有限公司| 博浩国际贸易有限公司| 兴达塑胶制品有限公司| 胜迈有限公司怎么样| 青岛万里江有限公司| 浙江中奇药业有限公司| 四川天全水泥有限公司| 长江建筑装饰工程有限公司| 上海药明康德有限公司| 绍兴紧固件有限公司| 尚家居国际有限公司| 富国橡塑工业有限公司| 深圳市永盛塑胶有限公司| 深圳市恩科电子有限公司| 美亚金属制品有限公司| 洲信信息技术有限公司| 阿美德格电机有限公司| 华泰橡塑机械有限公司| 河南正弘物业有限公司| 和兴隆餐饮有限公司| lg生活健康有限公司| 华粤五金深圳有限公司| tcl财务有限公司| 丰泽高科信息技术有限公司| 深圳中深建装饰设计工程有限公司| 北京利康搬家有限公司| 光塑机械制造有限公司| 苏州井利电子有限公司| 嘉华机械制造有限公司| 上海特钢有限公司地址| 成都整体家居有限公司| 大连龙湖地产有限公司| 福建亿方建设工程有限公司| 神盾信息技术有限公司| 远枫汽车销售有限公司| 成都华远设备有限公司| 高信化玻仪器有限公司| 光为绿色新能源有限公司| 弓箭玻璃器皿南京有限公司| 上海干细胞技术有限公司| 重庆秋霞餐饮有限公司| 山东小百人乳业有限公司| 云南三环中化有限公司| 佛山市致兴有限公司| 深圳新程电子有限公司| 山东养殖设备有限公司| 深圳嫚迪娜服饰有限公司| 其胜生物制剂有限公司| 青岛北洋设计有限公司| 国际视频通讯有限公司| 青岛绿城置业有限公司| 四川三捷电子有限公司| 理昂生物质发电有限公司| 保定九孚生化有限公司| 深圳荣科电子有限公司| 永晨 机械有限公司| 美宝莲苏州化妆品有限公司 | 森宇重工机械有限公司| 北京利达华信有限公司| 科富源电子有限公司| 盈康医疗器械有限公司| 浙江净化设备有限公司| 香港澜庭集贸有限公司| 美通机械制造有限公司| 我乐家居制造有限公司| 自动化有限公司 气动| 深圳市筑道建筑工程设计有限公司| 深圳新飞电子有限公司| 深圳创成电子有限公司| 华硕精密陶瓷有限公司| 金瑞包装机械有限公司| 苹果电脑贸易 上海 有限公司| 上海通讯技术有限公司| 深圳晶金电子有限公司| 骏洋旅游用品有限公司| 成都市天然气有限公司| 北京实木家具有限公司| 广州众恒光电有限公司| 格瑞玻璃棉制品有限公司| 中粮金帝食品有限公司| 上海 低温设备有限公司| 宏宇机电设备有限公司| 嘉兴兴通汽车销售有限公司| 成都绿色发展有限公司| 安徽安德建筑设计有限公司| 杭州百草味有限公司| 上海思创电子有限公司| 江苏盘龙建筑装饰有限公司| 鑫鑫生物能源有限公司| 园方装饰工程有限公司| 福禄克测试仪器有限公司| 深圳晶金电子有限公司| 上海体育俱乐部有限公司| 语言桥信息技术有限公司| 天津利纳马有限公司| 张家港汽车零部件有限公司| 众和装饰工程有限公司| 红板 江西 有限公司| 深圳市天亿电子有限公司| 浙江天马轴承有限公司| 南通江海电容器有限公司| 中铁装备有限公司招聘| 龙宇煤化工有限公司| 北京园林古建工程有限公司| 青海聚能源有限公司| 上海 豆豆有限公司| 深圳维泰克技术有限公司| 现代制药海门有限公司| 广州纺织机械有限公司| 荣江装饰工程有限公司| 鼎昌机械设备有限公司| 盐城贸易有限公司地址| 金石通机械有限公司| 蓝海国际贸易有限公司| 日立永济电气有限公司| 塑镕电容器有限公司| 云南营养品有限公司| 新时代信息技术有限公司| 威世电子(惠州)有限公司| 风尚服装(北京)有限公司| 沧州润滑油有限公司| 庆华精细化工有限公司| 卡莱梅州橡胶有限公司| 华源显示技术有限公司| 上海经贸有限公司地址| 安徽省施工图审查有限公司| 山西液压设备有限公司| 杰富意商事有限公司| 兰州工程设计有限公司| 渤海融资租赁有限公司| 南京苏夏设计有限公司| 广州盛泰贸易有限公司| 邦讯信息系统有限公司| 深圳创业有限公司招聘| 广州万宝空调有限公司| 精密汽车部件有限公司| 工业消防设备有限公司| 安徽电动汽车有限公司| 京智装饰设计有限公司| 赛维斯北京有限公司| 开元自动焊接装备有限公司| 当阳 机械 有限公司| 万都汽车部件有限公司| 哈尔滨汽车经销有限公司| 浙江盛发纺织有限公司| 深圳市贝恩电子有限公司| 扬州中扬食品有限公司| 海宁 运输有限公司| 十笏园食品有限公司| 金戈炜业壁纸有限公司| 特纳斯西安有限公司| 清睿信息技术有限公司| 诺天源贸易有限公司| 佛山市窗帘有限公司| 南通市金属制品有限公司| 光库通讯(珠海)有限公司| 中联环保工程有限公司| 深圳标远汽车有限公司| 四川电梯销售有限公司| 杭州中兴通讯有限公司| 普罗生物技术有限公司| 诚信小额贷款有限公司| 江苏恒远工程有限公司| 中山市厨田电器有限公司| 利丰贸易(深圳)有限公司| 北京中盛担保有限公司| 上海精嘉阀门有限公司| 黄山生态农业有限公司| 威阳医疗器械有限公司| 格林精密(苏州)有限公司| 深圳衡特电子有限公司| 远洋星实业有限公司| 医疗有限公司注册资金| 温州市嘉利有限公司| 金湖建设工程有限公司| 上海众恒信息有限公司| 黑龙江机电设备有限公司| 深圳华盛商业有限公司| 立思辰新技术有限公司| 深圳嫚迪娜服饰有限公司| 法国老人头有限公司| 大地仪器设备有限公司| 兴利五金制品有限公司| 嘉兴维当贸易有限公司| 浙江诸暨设备有限公司| 东莞金盛鸿电器有限公司| 传云物联网技术有限公司| 中兴农谷湖北有限公司| 大唐清洁能源有限公司| 江南环保设备有限公司| 上海欣和实业有限公司| 英洛华磁业有限公司| 北京六智信息技术有限公司| 福建电影发行有限公司| 青岛瑞智精密有限公司| 沈阳中航黎明有限公司| 纳路涂料(上海)有限公司| 临沂山松生物有限公司| 浙江东海岸有限公司| 橡塑有限公司 网站| 创业建筑工程有限公司| 广州科科学仪器有限公司| 万年青运动器材有限公司 | 舍弗勒(苏州)有限公司| 宁波博洋家纺有限公司| 上海宇仓仓储设备有限公司| 常熟 开关有限公司| 深圳宝利制品有限公司| 上海卓然技术有限公司| 空调系统设备有限公司| 百来太阳能有限公司| 深圳市创代电子有限公司| 泰佰亿工业有限公司| 蓝动激光技术有限公司| 博格华纳天津有限公司| 银农小额贷款有限公司| 杭州城乡建设设计院有限公司 | 佛山环球陶瓷有限公司| 湖南包装材料有限公司| 东科新材料有限公司| 江苏徐州发展有限公司| 河南电气自动化有限公司| 山东瑞森建筑工程有限公司 | 广州威健体育用品有限公司| 长安旅游汽车有限公司| 玉环双玉机械有限公司| 广州鹿山新材料有限公司| 瑞安市建筑五金有限公司| 上海招商证券有限公司| 深圳智凯电子有限公司| 苏州世硕电子有限公司| 海产品贸易有限公司| 苏州和联电子有限公司| 长白山制药有限公司| 华热机械制造有限公司| 摩恩水暖器材有限公司| 广东省英德市有限公司| 九州方园新能源有限公司 | 茂名 燃气有限公司| 海天雄电子有限公司| 金嘉利实业有限公司| 苏州艾柯电器有限公司| 中旗新材料有限公司| 山东曹县工艺品有限公司| 太平人寿保险有限公司招聘| 南京联创亚信有限公司| 四川电动汽车有限公司| 上海高贸易有限公司怎么样 | 日海通信工程有限公司| 万都海拉电子苏州有限公司| 太仓金马金属有限公司| 烟台东生物有限公司| 湘潭汽车部件有限公司| 苏州工业地坪工程有限公司| 川源苏州机械有限公司| 典发食品安井食品有限公司| 上海日科贸易有限公司| 阿城继电器有限公司| 广州市烟草有限公司| 车速递汽车租赁有限公司| 江苏安居安防有限公司| 金悦诚蓄电池有限公司| 浙江创维自动化工程有限公司| 蓝海进出口有限公司| 河北 灌溉设备有限公司| 上海万达有限公司招聘| 四川节能设备有限公司| 佛山市致兴有限公司| 滁州扬子空调有限公司| 巨星贸易(上海)有限公司| 湖北神电电机有限公司| 力知茂汽车配件有限公司| 品全装饰工程有限公司| 杭州远方光电信息有限公司| 深圳腾龙源实业有限公司| 宁波华翔汽车镜有限公司| 诺斯贝尔无纺日化有限公司| 君驰汽车销售有限公司| 广州链链有限公司怎么样| 川香源食品有限公司| 瑞鸿机电设备有限公司| 旗胜贵金属有限公司| 三星电子通信有限公司| 南安盈磊石材有限公司| 新佳装饰工程有限公司| 蓝星清洗(北京)有限公司| 圣戈班南京玻璃有限公司| 南京建筑工程劳务有限公司| 上海元山电器有限公司| 有限公司 主管部门| 德昌食品原料有限公司| 淄博鲁华化工有限公司| 佛山电力设计有限公司| 广州电线厂有限公司| 品全装饰工程有限公司| 山东消防器材有限公司| 万洲石化(江苏)有限公司| 龙岩曹溪)有限公司| 铁岭风力发电有限公司| 维克多精密有限公司| 赛利涂层技术有限公司| 清雅化妆品有限公司| 苏州佐竹机械有限公司| 阳杰 深圳有限公司| 厦门勤奋监理有限公司| 雅诺信珠宝首饰有限公司| 辉瑞动物保健品有限公司| 天宁香精香料有限公司| 宿迁固废处置处置有限公司| 上海和记黄埔地产有限公司| 森红家具有限公司招聘| 威海宝威渔具有限公司| 金佰利南京有限公司| 好一多乳业有限公司| 凯达尔实业有限公司| 泰宇信息技术有限公司| 上海亚华湖有限公司| 杨家声设计顾问有限公司|