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

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

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

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

 

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

 

安裝

安裝有瀏覽器的版本

npm i puppeteer

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

2024.1更新

現(xiàn)在默認不會安裝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();
    //設(shè)置可視區(qū)域大小
    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');
    //等待頁面跳轉(zhuǎn)完成,一般點擊某個按鈕需要跳轉(zhuǎn)時,都需要等待 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():點擊某個元素
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') 頁面關(guān)閉
page.on('console') console API 被調(diào)用
page.on('error') 頁面出錯
page.on('load') 頁面加載完
page.on('request') 收到請求
page.on('requestfailed') 請求失敗
page.on('requestfinished') 請求成功
page.on('response') 收到響應
page.on('workercreated') 創(chuàng)建 webWorker
page.on('workerdestroyed') 銷毀 webWorker

 

獲取 WebSocket 響應

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 事件,獲取對應的數(shù)據(jù)
    cdpSession.on('Network.webSocketFrameReceived', frame => {
        let payloadData = frame.response.payloadData;
        if(payloadData.includes('push:query')){
            //解析payloadData,拿到服務端推送的數(shù)據(jù)
            let res = JSON.parse(payloadData.match(/\{.*\}/)[0]);
            if(res.code !== 200){
                console.log(`調(diào)用websocket接口出錯: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 最強大的功能是,你可以在瀏覽器里執(zhí)行任何你想要運行的 javascript 代碼,下面是我在爬 188 郵箱的收件箱用戶列表時,發(fā)現(xiàn)每次打開收件箱再關(guān)掉都會多處一個 iframe 來,隨著打開收件箱的增多,iframe 增多到瀏覽器卡到無法運行,所以我在爬蟲代碼里加了刪除無用 iframe 的腳本:

(async () => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.goto('https://webmail.vip.188.com');
    //注冊一個 Node.js 函數(shù),在瀏覽器里運行
    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 對應的所有元素傳入到函數(shù)并在瀏覽器環(huán)境執(zhí)行
page.$eval(selector, pageFunction[, ...args]):把 selector 對應的第一個元素傳入到函數(shù)在瀏覽器環(huán)境執(zhí)行
page.evaluateOnNewDocument(pageFunction[, ...args]):創(chuàng)建一個新的 Document 時在瀏覽器環(huán)境中執(zhí)行,會在頁面所有腳本執(zhí)行之前執(zhí)行
page.exposeFunction(name, puppeteerFunction):在 window 對象上注冊一個函數(shù),這個函數(shù)在 Node 環(huán)境中執(zhí)行,有機會在瀏覽器環(huán)境中調(diào)用 Node.js 相關(guān)函數(shù)庫

 

抓取 iframe 中的元素

一個 Frame 包含了一個執(zhí)行上下文(Execution Context),我們不能跨 Frame 執(zhí)行函數(shù),一個頁面中可以有多個 Frame,主要是通過 iframe 標簽嵌入的生成的。其中在頁面上的大部分函數(shù)其實是 page.mainFrame().xx 的一個簡寫,F(xiàn)rame 是樹狀結(jié)構(gòu),我們可以通過 frame.childFrames() 遍歷到所有的 Frame,如果想在其它 Frame 中執(zhí)行函數(shù)必須獲取到對應的 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()){
        //根據(jù) 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();
})();

文件的上傳和下載

在自動化測試中,經(jīng)常會遇到對于文件的上傳和下載的需求,那么在 Puppeteer 中如何實現(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è)置下載路徑
    });
    //點擊按鈕觸發(fā)下載
    await (await page.waitForSelector('#someButton')).click();
    //等待文件出現(xiàn),輪訓判斷文件是否出現(xiàn)
    await waitForFile('path/to/download/filename');

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

 

 

模擬選擇文件

點擊元素觸發(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 頁處理

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

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;

 

 

模擬不同的設(shè)備

Puppeteer 提供了模擬不同設(shè)備的功能,其中 puppeteer.devices 對象上定義很多設(shè)備的配置信息,這些配置信息主要包含 viewport 和 userAgent,然后通過函數(shù) page.emulate 實現(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/#/

 

上一篇 MySQL多種索引引擎詳解
下一篇 CoreDownload - WP下載增強插件 1.0.6
目錄
applek

applek管理員

個人說明在個人中心里面設(shè)置

本月創(chuàng)作熱力圖

最新評論
chinacnd
chinacnd
6月26日
這個主題是怎么做到加載速度那么快的?
風起云涌
風起云涌
6月17日
前臺投稿現(xiàn)在有點太抽象了 希望可以弄成那種分區(qū)填寫的 標題,內(nèi)容,圖片,目錄,標簽,這樣的
評論于留言建議
風起云涌
風起云涌
6月17日
希望加個開關(guān)去掉頁腳的站點身份,還有自定義頁腳居中文字
評論于留言建議
卡卡
卡卡
5月31日
倒是放個演示地址啊
av素人天堂_free性亚洲_久久亚洲国产视频_国产网红在线_午夜av在线播放_欧美成人精品福利网站_热99在线观看_国产在线观看免费麻豆_日本高清在线观看_亚洲免费网站观看视频
婷婷久久综合九色国产成人| 中文字幕 欧美 日韩| 91精品国产综合久久香蕉最新版| 精品一二三四| 国产在线不卡av| 欧美日韩性视频一区二区三区| 中文字幕在线导航| 国产 欧美 日韩 在线| 日韩久久精品成人| 亚洲综合欧美在线| 日韩三级视频在线看| 中文字幕无线码一区| 综合图区亚洲白拍在线| 午夜成人鲁丝片午夜精品| 精品一二三区视频| 国产午夜在线观看| 日韩欧美一级在线| 中文字幕日韩欧美在线视频| 国产高清在线一区| 日韩精品在线免费播放| 在线视频不卡国产V| 精品国产乱码一区二区| 一区二区高清在线| 免费网站看黄yyy222| 免费高清在线一区| 在线观看一区日韩| 精品亚洲成a人片在线观看| 午夜影院在线观看欧美| 欧美日韩尤物久久| 日韩三级高清在线| 亚洲女同中文字幕| 国产色综合网| 日韩欧美久久| 日韩国产成人精品| 91精品国产综合久久香蕉最新版| 91精品婷婷国产综合久久| 首页国产欧美久久| 国产欧美久久久精品免费| 欧美日韩在线视频免费观看| 国产三级在线| 亚洲欧美中文字幕| 日韩精品视频在线播放| 日韩一级二级三级精品视频| 日韩欧美中文字幕公布| xxxxx性| 国产亚洲污的网站| 日韩视频中文| 午夜一区二区三区视频| 97久久精品| 91精品国产自产91精品| 一区三区视频| 在线免费91| 国产手机视频一区二区| 日韩在线二区| 国产午夜精品一区二区三区视频| 日韩免费电影网站| 国产免费永久在线观看| 欧美日韩高清在线播放| 久久夜色精品国产噜噜亚洲av| 午夜精品一区二区三区免费视频| 国产三级做爰在线观看| 日韩 欧美 亚洲| 二区中文字幕| 精品三级在线| 亚洲第一中文字幕| 国产激情在线视频| 亚洲日本精品视频| 亚洲 欧美综合在线网络| 福利在线国产| 久久精品日韩欧美| 国产黄在线观看免费观看不卡| 日本不卡视频一区| 精品乱子伦一区二区| 国产欧美综合在线观看第十页| www.老鸭窝.com| 成人一区二区不卡免费| 欧美91精品| 快she精品国产999| 日韩欧美国产一二三区| 在线手机中文字幕| 日韩精品中文字幕第1页| 欧美 日韩 国产 高清| 欧美国产小视频| 视频一区二区精品的福利| 精品欧美日韩精品| 国产丝袜一区| 日韩欧美不卡视频| 91久久久精品| 久久久精品免费免费| av丝袜在线| 日韩在线视频观看正片免费网站| 中文字幕欧美人妻精品一区蜜臀| 国产偷久久久精品专区| 国精品产品一区| 亚洲欧美韩国综合色| 欧美日韩综合高清一区二区| 国产在线拍偷自揄拍精品| 日韩欧美一二三四区| 中文字幕日韩欧美在线视频| 日韩亚洲欧美中文在线| 国产丝袜一区二区| 亚洲第一中文字幕在线观看| 国产日韩精品在线观看| 亚洲羞羞网站| а√天堂中文在线资源8| 日韩欧美中文在线| 日韩欧美在线网址| 精品久久蜜桃| 日韩1区在线| 国产成人精品三级| 国产视频中文字幕在线观看| 欧美 亚洲 精品 三区| 欧美色欧美亚洲高清在线视频| 欧美 日韩 国产 高清| 久久精品久久久久| 欧美中文字幕第一页| 91精品无人成人www| 中文字幕亚洲一区在线观看| 国产三级精品网站| 亚洲最新永久观看在线| 91久久久精品国产| 91精品在线看V| 亚洲一区视频在线观看视频| 91精品视频国产| 日韩精品在线观看网站| 日韩在线高清| 欧美日韩国产在线看| 久久综合九色欧美综合狠狠| 日韩精品久久久| 国产欧美亚洲一区| 国产激情在线观看| 91精品观看| 久久99精品国产| 97caopor国产在线视频| 国产在线高清精品| 亚洲最新免费视频| www.老鸭窝.com| 亚洲素人一区二区| 日韩欧美中文在线视频| 欧美日韩国产免费观看| 区日韩二区欧美三区| 国产在线一在线二| av手机天堂| 成年人黄国产| a天堂在线资源| 中文天堂在线一区| 国产手机视频一区二区| 精品久久在线观看| 国产高潮久久久| 亚洲天堂视频一区| 黄色视屏免费在线观看| 国产久卡久卡久卡久卡视频精品| 免费国产h视频在线观看86| 日韩中文字幕视频网| 91精品在线观看国产| 日韩精品首页| 欧美色视频一区二区三区在线观看| 欧美日韩中文字幕在线观看| 国产黄色片大全| 久久网站免费观看| 国产区视频在线观看| 99精品一级欧美片免费播放| 国产欧美高清在线| 欧美三级日本三级少妇99| 欧美三级网址| 在线手机中文字幕| 日韩欧美中文视频| 国产主播中文字幕| 99久久婷婷| 一区二区视频在线| 色偷偷一区二区三区| 中文字幕在线视频日韩| 97天天综合网| 久久精品人妻一区二区三区| 欧美亚洲国产日韩| 欧美日韩中文字幕在线观看| 不卡av免费在线| 日韩欧美中文在线| 日韩不卡av| 欧美日韩国产黄色| 福利在线国产| 亚洲视频电影在线| 国产一区三区三区| 亚洲一区在线观看视频| 欧美日韩一级黄| 日韩中文字幕久久| 久久婷婷中文字幕| 日韩 国产 一区| 中文字幕 欧美 日韩| 在线视频亚洲| 中文字幕人成乱码在线观看| 日本精品福利视频| 麻豆精品视频入口| 中文字幕在线精品| 国产wwww| 精品婷婷伊人一区三区三| 午夜一区二区三区视频| 日韩欧美在线影院| 国产调教精品| 国产婷婷色一区二区三区在线| 国产高清精品在线| а√天堂8资源中文在线| 欧美日韩高清一区二区不卡| 亚洲制服丝袜一区| 日韩av一区二区在线| 国产www.大片在线| 国产欧美日韩成人| 韩国v欧美v日本v亚洲| 精品在线一区二区| 欧美日韩国产三级| 久久视频免费看| 欧美亚洲国产激情| 欧美日韩精品区| av最新网址| 深夜日韩欧美| 欧美日韩中文字幕在线| 精品熟女一区二区三区| 精品视频在线导航| 国产成人精品免费久久久久| 免费一级欧美在线观看视频| 91精品国产91久久久久久久久| 日韩精品在线私人| 国内精品露脸在线视频播放| 欧美国产三级| 欧美 日韩 国产 在线| 天堂精品高清1区2区3区| 国产中文在线| 久草视频观看| a级在线免费观看| 日韩不卡中文字幕| 深夜日韩欧美| 精品日韩一区二区三区免费视频| 国产日韩中文字幕在线| 国产亚洲一区字幕| 亚洲深夜福利| av免费观看网站| 久久久精品午夜少妇| 国产卡1卡2卡三卡在线| 欧美日韩精品在线视频| 中文亚洲欧美| 亚洲成在线观看| 欧美啪啪一区| 91精品视频免费在线观看| 国产一级网站视频在线| 日韩视频专区| 久久久精品欧美| 精品久久久视频| 久久久久蜜桃| 国产三级视频在线播放线观看| 欧美日韩国产中字| 91久久视频| 亚洲一区视频在线观看视频| 日韩精品在线观看视频| 国产一级免费看| 国产一区久久久| 日韩国产欧美亚洲| 欧美三级日韩三级国产三级| 欧美久久在线观看| 亚洲专区一区| 国产福利在线看| 91精品在线观看视频| 亚洲.国产.中文慕字在线| 欧美日韩国产成人| av不卡免费看| av午夜在线| 视频一区视频二区中文| 中文字幕日韩在线视频| 亚洲精华国产欧美| 精品三级av| 国产区在线看| 精品久久久精品| 欧美一级二级三级区| av免费在线观看网址| 精品国产网站在线观看| 亚洲 国产 欧美 日韩| 青青国产91久久久久久| 欧美一卡2卡3卡4卡| 国产欧美日韩在线观看| 国产福利精品导航| 精品一区二区三区中文字幕在线| 日韩中文欧美| 在线中文字幕视频观看| 三级网站免费观看| 美国av一区二区| 精品成人久久av| 日韩在线视频一区二区三区| 91久久中文| 色综合婷婷久久| www.91香蕉视频| 国产农村妇女精品一二区| 国产日韩中文字幕| 黄色国产在线| 日韩www在线| 欧美日韩在线视频首页| 青青国产91久久久久久| 中文字幕精品视频在线| 99综合精品久久| 精品九九久久| 91久久精品国产91性色69| 最近中文字幕第一页| 中文字幕第一页在线播放| 欧美三级在线视频| 亚洲国产专区| 亚洲校园欧美国产另类| 中文字幕第一页在线播放| 国产亚洲福利| 国产在线精品日韩| 黄色国产在线| 国产三级视频在线| 日韩wumaV| 欧美日韩国产亚洲一区| 在线观看免费国产小视频| 91精品视频在线| 国产日韩1区| 亚洲高清视频在线| 国产69精品久久app免费版| 色综合天天综合网天天狠天天| 久久香蕉一区| 亚洲欧洲日产国码av系列天堂| 欧美日韩国产中文| 久久久久久自在自线| 国产手机视频一区二区| 天堂在线www天堂中文在线| 久久精品www| 日韩在线中文| 美日韩精品免费视频| 欧美中文字幕在线视频| 欧洲精品久久久| 欧美日韩在线精品一区二区三区激情综| wwww亚洲| 97视频在线| 免费国产h视频在线观看86| 国产导航在线| 国产福利在线看| 色综合天天综合网国产成人综合天| 国产一级一片免费播放| 中文国产字幕在线观看| 国产不卡在线| 日韩精品 欧美| 欧美一级久久久久久久久大| 精品国产网站在线观看| 国产视频三级在线观看播放| www日韩在线观看| 一区二区不卡在线播放| 国产区视频在线观看| 91精品视频在线| 日韩精品中文字幕第1页| 日韩欧美不卡在线| 国产欧美日韩高清| 久久91精品久久久久久秒播| 国产中文在线| 精品一二线国产| 久久婷婷综合国产| 一本久久a久久精品亚洲| 九九在线精品| 一区二区三区鲁丝不卡| 国产欧美久久久| 亚洲精品欧美二区三区中文字幕| 精品在线一区二区| 亚洲视频资源在线| 欧美成人vr18sexvr| 丰满少妇一区二区| 欧美不卡视频一区发布| 日本免费在线视频不卡一不卡二| www.xxxx精品| 国产一级片在线播放| 国产乱国产乱老熟300部视频| 国产福利免费在线观看| 国产欧美综合在线| 日韩欧美国产成人一区二区| 一区二区三区精品在线观看| 亚洲第一视频网站| 精品人妻一区二区免费视频| 免费在线视频一区二区| 91精品国产综合久久香蕉的特点| 在线精品日韩| 亚洲第一视频在线观看| 亚洲欧洲在线观看av| 一级片免费网站| 欧美天堂一区二区| 在线手机中文字幕| 国产高清在线视频| 日韩欧美高清在线视频| 精品国产免费观看一区| 日韩欧美中文字幕精品| 精品日韩在线| 精品视频资源站| 色综合天天综合网天天狠天天| 深夜日韩欧美| 国产乱国产乱老熟300部视频| 日韩高清不卡在线| 国产黄色片中文字幕| 精品三级av| 一本一道综合狠狠老| 欧美日韩国产中文精品字幕自在自线| 欧美日韩高清| 免费在线视频一级不卡| 伊人亚洲视频| 欧美三级一区二区三区| 中文字幕在线欧美|