av素人天堂_free性亚洲_久久亚洲国产视频_国产网红在线_午夜av在线播放_欧美成人精品福利网站_热99在线观看_国产在线观看免费麻豆_日本高清在线观看_亚洲免费网站观看视频

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

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

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

 

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

 

安裝

安裝有瀏覽器的版本

npm i puppeteer

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

2024.1更新

現(xiàn)在默認(rèn)不會安裝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 //邊滾動邊截圖
        // 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 會話
    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)掉都會多處一個(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í)行,會在頁面所有腳本執(zhí)行之前執(zhí)行
page.exposeFunction(name, puppeteerFunction):在 window 對象上注冊一個(gè)函數(shù),這個(gè)函數(shù)在 Node 環(huán)境中執(zhí)行,有機(jī)會在瀏覽器環(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();
})();

文件的上傳和下載

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

(async () => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    //通過 CDP 會話設(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ā)選擇文件框,不會顯示,直接返回選擇文件

    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í)會新開一個(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
av素人天堂_free性亚洲_久久亚洲国产视频_国产网红在线_午夜av在线播放_欧美成人精品福利网站_热99在线观看_国产在线观看免费麻豆_日本高清在线观看_亚洲免费网站观看视频
天天综合天天添夜夜添狠狠添| 国产婷婷色一区二区三区在线| 国产在线精品国自产拍免费| 中文字幕 乱码 中文乱码91| 亚洲免费福利视频| 一区二区视频在线| 91极品视频在线观看| 日韩三级一区| 日韩国产亚洲欧美| 国产永久免费高清在线观看| 欧美日韩免费不卡视频一区二区三区| h片精品在线观看| 日韩欧美综合视频| 亚洲高清视频在线| 午夜黄色小视频| 国产精品视频福利一区二区| 日韩欧美中文字幕公布| 99久久www免费| 精品日韩视频在线观看| 亚洲视频 中文字幕| 一区二区高清视频| 久久 天天综合| 日韩av二区| 国产欧美久久久精品影院| 日韩精品一级| 亚洲黄色在线观看| 中文字幕第一页在线播放| 日韩在线视频免费观看| 日韩av二区| 九一久久久久久| 欧美在线日韩精品| 91精品国产色综合久久久蜜香臀| 999精品视频在线观看播放| 日韩精品不卡一区二区| 欧美亚洲视频在线看网址| 国产欧美高清在线| 精品欧美日韩在线| 在线观看区一区二| 欧美日韩在线播放三区四区| 久久精品日韩欧美| 亚洲综合日韩中文字幕v在线| 国产日韩亚洲欧美| 日韩av一区二| 国产拍揄自揄精品视频麻豆| 国产在线欧美日韩| av免费在线观看网址| 婷婷久久综合网| 精品播放一区二区| 午夜国产福利一区二区| 欧美色视频一区二区三区在线观看| 亚洲精品中文字幕乱码三区不卡| 国内精品不卡| 国产高清精品二区| 999精品视频在线观看播放| 中文字幕成人乱码在线电影| 91精品久久久久久蜜臀| 精品日韩欧美在线| 国产午夜精品视频免费不卡69堂| 国产99对白在线播放| 日韩精品在线观看视频| 国产丝袜一区| 91精品国产综合久久精品app| 中文字幕日韩免费视频| 国产一级免费在线观看| 日韩国产欧美| 欧美一级在线免费| 一二三区精品福利视频| 亚洲电影中文字幕在线观看| 久久精品久久精品亚洲人| 国产黄在线观看| 在线中文字幕视频观看| 欧美色欧美亚洲高清在线视频| 国产区在线看| 欧美日韩高清一区二区不卡| av免费观看网站| 国产综合成人久久大片91| 日韩视频精品在线| 中文字幕在线观看精品| 在线资源av| 精品婷婷伊人一区三区三| 一级片免费网站| 日韩中文在线字幕| 国产资源中文字幕| 欧美亚洲视频在线看网址| 在线视频你懂得一区| 999精品色在线播放| 国产一区三区三区| 日韩一级二级三级| 日韩精品一页| 欧美激情视频一区二区三区在线播放| 日本黄色一区二区三区| wwww亚洲| 欧美国产综合视频| 色www精品视频在线观看| 中文字幕 乱码 中文乱码91| 欧美日韩国产首页| www日韩欧美| 91久久视频| 国产欧美日韩91| 国产综合成人久久大片91| 亚洲永久字幕| 欧美日韩中文字幕日韩欧美| 美女黄a一级视频| 日韩精品视频在线播放| 日韩欧美一级在线| 精品一二三区| 日韩精品福利一区二区三区| 黄色片免费看| 日韩a一区二区| 99精品视频国产| 韩国v欧美v日本v亚洲| 久久视频免费看| 欧美日韩精品不卡| aaa免费看大片| 国产成人精品日本亚洲专区61| 精品熟女一区二区三区| 国产亚洲一区字幕| 一区二区中文字幕在线| 久久精品99国产国产精| 99视频精品全国免费| 免费高清在线一区| 日韩精品三级| 日韩高清不卡在线| 天堂精品高清1区2区3区| 日韩精品大片| 精品三级在线| 色屁屁一区二区| 欧美一卡2卡三卡4卡5免费| 国产在线小视频| 欧美在线亚洲一区| 国产在线播放一区二区| 国产成人精品999| 国产永久免费高清在线观看| 在线视频三区| 国产日韩精品电影| 国产91大片| 91精品国产91久久久久久久久| 激情综合色综合久久| 日韩国产专区| 亚洲永久免费视频| 中文在线中文字幕| 亚洲第一中文字幕在线观看| 欧美在线中文字幕| 91麻豆视频网站| 国产日韩精品电影| 日韩欧美一卡二卡| 亚洲成年网站在线观看| 日韩视频精品在线观看| 欧美性极品xxxx做受| 日韩欧美在线网址| 欧美日韩高清一区二区不卡| 欧美三级日本三级少妇99| 日韩在线观看一区| 日韩免费精品| 久久99久久久久| 一本一道久久a久久精品综合蜜臀| 国产免费一级| 亚洲一区资源| 日韩精品乱码av一区二区| 久久精品国产成人一区二区三区| 中文字幕在线观看精品| 日韩手机在线观看视频| 亚洲综合在线视频| 日韩久久99| 日韩精品在线观看视频| 天天综合色天天| 中文字幕亚洲免费| 色综合久久六月婷婷中文字幕| 成人禁用看黄a在线| av一卡二卡| 国产在线观看色| 久久夜色精品国产欧美乱极品| 午夜福利一区二区三区| 黄色片免费看| 欧美日韩第一区日日骚| 欧美日韩国产黄色| 日本精品国语自产拍在线观看| 欧美片网站免费| 日韩中文字幕在线视频播放| 中文字幕一区不卡| 精品视频在线视频| 欧美日韩在线观看首页| 亚洲二区自拍| 国产永久在线观看| 在线日韩欧美| 亚洲欧美中文字幕在线一区| 国产欧美日韩不卡免费| 久久久91精品| 日韩精品大片| 午夜高潮免费视频| 欧美日韩国产999| 成人久久久久| 精品久久香蕉国产线看观看gif| 欧美高清视频一区二区三区| a√免费观看在线网址www| 欧美一级一级性生活免费录像| 国产视频1区2区| 日韩中文字幕久久| 国产网站欧美日韩免费精品在线观看| 国产在线一在线二| 欧美亚洲综合视频| 亚洲 欧美 日韩系列| 国产黄色在线观看| 精人妻一区二区三区| 亚洲一区中文字幕在线| 国产日韩中文在线| 一级免费a一片| 91精品国产91久久久久| 久久99精品久久久| 在线日韩中文| 欧美日韩精品久久久| 国产成人精品免费网站| 国产一区深夜福利| 欧美日韩亚洲不卡| 中文字幕五月欧美| 精品一区二区三区中文字幕| 一区二区三区中文字幕在线观看| 国产专区中文字幕| 亚洲一级特黄| 国产欧美三级| 日韩视频在线观看一区| 日韩在线小视频| 国产成人精品免费久久久久| 国产卡1卡2卡三卡在线| 国产福利三区| 日韩欧美国产不卡| 色综合影院在线| 欧美日韩成人综合| 国产日韩精品在线观看| 国产网站欧美日韩免费精品在线观看| 日韩欧美高清在线| wwwav91com| 日韩视频一区二区在线观看| 日韩中文在线中文网三级| 日韩国产成人精品| 欧美人妻一区二区三区| 欧美国产小视频| 一区二区三区在线播| а√天堂8资源中文在线| 国产乱国产乱老熟300部视频| 免费视频国产一区| 国产 中文 字幕 日韩 在线| 国产在线日韩欧美| 在线国产日本| 一区二区三区精品99久久| lutube成人福利在线观看| 国产福利一区在线观看| 亚洲国产综合久久| 亚洲小说春色综合另类电影| 一区二区在线观| 国产亚洲人成a一在线v站| 中文字幕亚洲乱码| 婷婷精品视频| a视频在线播放| 欧美三级在线视频| 亚洲视频在线观看三级| 欧美一级在线免费| 欧美中文字幕在线观看视频| 国产欧美日韩亚州综合| 在线观看免费国产成人软件| 欧美日韩午夜在线视频| 国内国产区免费视频| 欧美精选午夜久久久乱码6080| 欧美区高清在线| 国产免费永久在线观看| 日韩国产一区三区| 日韩欧美中文第一页| 日韩精品在线免费看| lutube成人福利在线观看| 欧美日韩国产一区中文午夜| 美女尤物久久精品| 日韩三级视频在线看| 日韩中文字幕第一页| 日韩亚洲不卡在线| 国产一区成人| √天堂资源中文www| 精品一二三四| 欧美天堂一区二区| 美日韩精品免费视频| 中文字幕在线高清| 午夜亚洲一区| 婷婷中文字幕一区| 最新中文字幕在线| 国产乱国产乱老熟300| wwwwww在线观看| 日韩中文字幕观看| 日韩国产欧美| 久久人人88| 欧美日韩精品在线观看| 欧美日韩亚洲天堂| 久久精品黄色片| 国产v日产∨综合v精品视频| 69免费视频| 91精品国产色综合久久久蜜香臀| 精品无人国产偷自产在线| 黄色资源在线观看| 欧美色视频一区二区三区在线观看| 一级日韩一级欧美| 日韩午夜一区| 国产高清不卡av| 在线免费视频一区二区| 国产第一页在线播放| 日韩高清在线一区二区| 国产69精品久久app免费版| 91日韩欧美| 中文字幕精品视频在线| 91 中文字幕| 日韩国产在线不卡视频| 色综合久久六月婷婷中文字幕| 99pao成人国产永久免费视频| 一区二区精品区| 一区二区三区中文字幕在线观看| 国产999在线观看| 国产亚洲欧美色| 国产不卡在线| 国产字幕在线看| 日本免费在线视频不卡一不卡二| 亚洲乱码视频| 亚洲国产www| 91精品在线国产| 在线欧美一级视频| 国产激情在线播放| 日韩欧美国产一二三区| 国产欧美日韩在线| 中文字幕最新精品| 欧美高清视频一区二区三区| 国产91久久久久蜜臀青青天草二| 国产日韩在线视频| 深夜日韩欧美| 一区二区不卡在线| 亚洲一区中文在线| 最近中文字幕在线中文高清版| 欧美日韩精品三区| 日韩中文字幕视频网| 欧美日韩在线不卡视频| 亚洲国产午夜精品| 欧美日韩综合高清一区二区| 欧美亚洲国产免费| 日韩欧美色综合| 欧美日韩精品国产| 精品免费视频| 精品网站999| 久久久精品国产99久久精品芒果| 日韩av一区二区在线| 国产一卡2卡3卡4卡网站免费| 国产日韩精品在线观看| 亚洲va韩国va欧美va精品| 欧美日韩综合不卡| 午夜精品一区二区三区免费视频| 欧美色欧美亚洲高清在线视频| 亚洲影视资源网| 欧美日韩国产三级| 中文字幕日韩国产| 一区二区在线看| 日韩在线中文视频| 国产成人精品日本亚洲专区61| 欧美日韩精品免费看| 欧美日韩色综合| 日韩久久精品视频| 免费网站看黄yyy222| 亚洲精华国产欧美| www.av中文字幕| 欧美日韩国产一区中文午夜| 91久久精品网| 91久久精品国产91久久| 精品国产999| 欧美日韩亚州综合| 国产91久久久久蜜臀青青天草二| 国产欧美日韩中文久久| 欧美日韩成人一区| 精品久久在线| 国产一级片在线| 国产欧美日韩在线| 91精品国产全国免费观看| 欧美亚洲国产激情| wwwwww在线观看| 国产欧美日韩中文字幕在线| 九色蝌蚪视频在线| 97久久精品午夜一区二区| 在线亚洲人成| 91精品免费观看| 中文欧美字幕免费| 色综合久久88色综合天天免费| 中文字幕精品一区二| 日韩视频在线一区二区| 亚洲欧美中文字幕| 日韩中文字幕第一页| 日韩在线视频免费观看高清中文| 日韩亚洲一区中文字幕| 中文字幕精品视频在线| 天天综合日日夜夜精品| 91www成人久久| 日韩视频在线免费播放| 亚洲欧美99| 国产69精品久久app免费版| 中文字幕在线观看国产| 国产欧美日韩综合| 亚洲成年人影院在线| 精品人妻二区中文字幕| 国产午夜精品视频|