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在线观看_国产在线观看免费麻豆_日本高清在线观看_亚洲免费网站观看视频
国产久草在线| 本道综合精品| 天天操夜夜欢| 日本一级理论片在线大全| 国产在线视频你懂| 中文字幕你懂得| av在线中文| 男人天堂网在线观看| 男人天堂综合| 日本不卡不卡| 九色视频在线观看| 激情六月丁香| 免费久久网站| 激情综合丝袜美女一区二区| 极度色播免费播放视频| 久草在线视频网| 亚洲精品精品一区| 国产在线视频精品视频免费看| 中文天堂av| 午夜免费啪视频观看视频| 国产理论在线观看| 中文字幕在线久热精品| 国产叼嘿网站免费观看不用充会员| 中文字幕免费在线观看| 国产精品美女一区二区三区四区| 超碰免费97在线观看| 国产专区在线播放| 国产在线观看精品一区| 国产精品毛片一区二区三区四区| 新天堂中文资源官网在线观看| 超碰免费公开在线| 青青操夜夜操青青艹在线视频| 九色视频网站在线观看| aaaaa级片| 男人久久精品| 黄色在线播放网站| 欧美1区二区三区公司| 国产日本在线观看| 在线中文免费视频| 久久天堂夜夜一本婷婷麻豆| 黄色av免费在线看| 精品亚洲综合| 大香一本蕉伊线亚洲网| 九九热免费在线视频| 国产真实伦在线观看| 成人蜜桃视频网站网址| 性网站在线免费观看| 国产一级免费在线观看| 欧美精产国品一二三区| h视频在线网站| 在线观看电影av| 国产一区你懂的| 成人ww免费完整版在线观看| 黄色的视频在线观看免费| 日本高清中文字幕| www中文字幕| 黄色av免费在线| 思99热精品久久只有精品| 欧美成人三区| 欧美一级久久久久久久久大| 精品久久久久一区二区三区| 狠狠艹夜夜干| 91精品专区| 一不卡在线视频| 国产麻豆视频免费观看| 日本v片在线免费观看| 最近免费中文字幕mv视频| 中文字幕有码热在线视频| 天堂在线亚洲| 宅男宅女性影片资源在线1| h视频在线播放| 亚洲在线激情| 亚洲女人天堂a在线播放| 96精品视频| 噜噜噜在线观看播放视频| 天天草天天干| 日本19禁啪啪吃奶大尺度| 亚洲女人天堂a在线播放| 金瓶狂野欧美性猛交xxxx| 97视频免费| 国产天堂在线播放视频| 九色蝌蚪在线| 男插女视频久久久| 亚洲国产精品精华素| 2017天天干夜夜操| av在线电影免费观看| 日本综合一区二区三区| 伊人影院在线视频| 亚洲不卡1卡2卡三卡2021麻豆| 四虎国产精品永久地址998| 尤物免费看在线视频| julia中文字幕久久亚洲蜜臀| 在线免费观看黄色片| **毛片在线网站| 99视频免费| av成人福利| 国产主播在线资源| 91在线品视觉盛宴免费| 美州a亚洲一视本频v色道| 国产视频二区在线观看| 成人a在线视频免费观看| 粉嫩tv在线播放| 亚洲男人天堂2020| 国产5g影院天天爽天天看| 在线观看电影av| 国产精品9区| 日本中文字幕一区二区有码在线| 国产美女自拍视频| www怡红院| 高清视频一区二区三区四区| 久草视频国产| 日本aa大片在线播放免费看| 在线观看av资源网| av在线免费观看网站| a视频在线观看免费| 国产免费福利网站| 免费黄网站在线观看| 中文天堂在线观看| 好看的中文字幕在线播放| seerx性欧美巨大| 欧美偷拍视频| 色九视频91| 中文乱码字幕av网站| 天天摸天天干| 日本夜爽爽一二区| 国产羞羞视频| 最近最好的中文字幕2019免费| 久久这里精品| 欧美精品日韩少妇| 北岛玲一区二区三区| 日本一本视频| 在线看片你懂的| 69日小视频在线观看| 91短视频版在线观看www免费| 欧美精品小视频| 男人的天堂在线视频免费观看| 成年人网站在线观看免费| 中文字幕在线视频网| 久草在现在线| 青青九九免费视频在线| 啊啊啊啊啊啊啊视频在线播放| 精品电影在线| 成年人免费在线视频| 日本电影全部在线观看网站视频| 成年免费视频黄网站在线观看| 在线黄色国产电影| 三级小说一区| 任你弄在线视频免费观看| 黄色电影网站在线观看| 欧美作爱福利免费观看视频| 亚洲91av| 91美女视频在线| 男人精品网站一区二区三区| 欧美色欧美色| 激情小说 在线视频| 一区二区三区高清在线视频| 狠狠操在线视频| 中文字幕有码在线视频| 久草资源在线| 第四色日韩影片| 亚洲美女色视频| 蜜桃视频在线观看免费视频网站www| 超碰个人在线| 岛国在线视频| 国产高清视频在线播放| 成年人看的羞羞网站| 免费黄色大片| www.一区二区三区.com| 国产精品冒白浆免费视频| 久久99精品久久久久久野外| 国产99re66在线视频| 欧美日韩亚洲国内综合网| 日本激情视频网| 69视频在线| 国产卡1卡2卡三卡在线| 97超碰在线资源站| 欧美另类交视频| 免费观看v片在线观看| xvideos国产在线视频| 国产福利片在线| 日本天码aⅴ片在线电影网站| 1234区在线观看视频免费| 18深夜视频在线观看| 91短视频版在线观看www免费| 国产区在线视频| 国产欧美黑人| 午夜免费福利在线观看| 国产日本在线观看| 在线免费福利| 羞羞小视频在线观看| 九七伦理97伦理手机| 亚洲an天堂an在线观看| lutube成人福利在线观看| 91精品专区| 不卡av免费观看| 男插女视频久久久| 亚洲区精品久久一区二区三区| 日本三级电影免费观看| 久热中文字幕在线精品首页| yes4444视频在线观看| 国产乱妇乱子| 在线xxxx| aaa在线播放视频| 2021天堂中文幕一二区在线观| 成片免费观看| 福利小视频在线观看| 国内av一区二区三区| wwww在线观看免费视频| 国产在线高清视频| 国产视频一二区| 在线黄色av| 91亚洲天堂| 日本美女高清在线观看免费| 国产精品入口麻豆免费观看| 日本电影一区二区在线观看| 国产日产一区二区三区| av片在线看| 性色视频在线观看| 亚洲美女色视频| 热久久中文字幕| av影院在线| 在线观看国产麻豆| 天天干天天爽| 亚洲精选av在线| 77777_亚洲午夜久久多人| 德国极品另类| 国产亚洲精品久久久网站好莱| 中文在线天堂网| 先锋资源一区二区| 国产精品福利视频一区二区三区| 一区二区电影网| 国产精品入口麻豆免费看| xxxxx日韩| 超碰人人在线| 在线免费观看黄色片| 成年人福利网站| 欧美三级黄视频| 麻豆免费在线观看| 黄页网站在线观看| 国产黄色免费电影| 亚洲线精品久久一区二区三区| 日本电影在线观看网站| 亚洲第一图区| 国产高清在线| 综合图区欧美| 国产成人高清精品| 日本a在线播放| 尤物视频在线观看| 亚洲嫩模一区| 亚洲男人资源| 中文字幕2019第三页| 黄色网页网址在线免费| 玖玖综合伊人| 欧美另类极品videosbest视频| 欧美aaa一级| www在线播放| 色先锋av资源中文字幕| 中文字幕高清av| а√天堂中文在线资源bt在线| 中文字幕你懂得| 97视频在线观看网站| 久艹在线视频| 日本fc2在线观看| 九色蝌蚪在线视频| www.男人天堂.com| 伊人色综合网| 天天看天天干| 国产二级片在线| 毛片网站在线| 欧美乱大交xxxxx另类| 成人亚洲欧美日韩在线观看| 亚洲欧美自拍另类| 精产国产伦理一二三区| 亚洲网站视频在线观看| 超碰在线人人| 欧美性猛交xxxx免费看久久| 97精品高清一区二区三区| 成年网站在线看| 欧美色黄视频| 精品51国产黑色丝袜高跟鞋| 国产福利在线看| 91社区在线| 亚洲日本一区二区三区在线观看| 伊人色综合网| 2021天堂中文幕一二区在线观| 国产日韩精品在线看| 成年网站在线观看| 福利在线视频网站| 国产成人精品实拍在线| 国产精品自产拍在线观看2019| 激情在线视频播放| 欧美日韩在线资源| 亚洲pron| 91在线最新| 午夜激情在线| av最新网址| 成人在色线视频在线观看免费大全| 午夜免费啪视频观看视频| 男女污污视频在线观看| 国产三级做爰在线观看| 国产视频一二三区| 91桃色在线观看| 国产在线一区二区视频| 99久热re在线精彩视频| 18被视频免费观看视频| 米奇精品一区二区三区| 国产在线观看免费麻豆| wwwww在线观看免费视频| 最新国产在线精品91尤物| 韩国中文字幕2020精品| 日本动漫同人动漫在线观看| 2021av在线| av网站导航在线观看免费| 人妖欧美1区| 亚洲妇熟xxxx妇色黄| free亚洲| 在线观看wwww| 区二区三区在线| 国产精品一区二区资源| 秋霞福利视频| 麻豆免费视频网站入口| 色先锋av资源中文字幕| 极度色播免费播放视频| 怡红院av在线| 国产图片综合| eeuss影院www在线播放| 精品黄色免费中文电影在线播放| 在线免费色视频| 粉嫩粉嫩芽的虎白女18在线视频| av免费在线免费观看| 九色视频网站入口| 小水嫩精品福利视频导航| 在线国产福利| 成人亚洲精品777777ww| 激情中文字幕| 成码无人av片在线观看网站| 久久精品一区二区三区资源网| 热99re久久精品精品免费| 在线播放国产区| 九色精品视频在线观看| 濑亚美莉一二区在线视频| 国产福利在线免费观看| 国产成人精品男人的天堂538| 成r视频免费观看在线播放| 97在线观视频免费观看| **三级三级97片毛片| 久操视频在线免费播放| 九色国产视频| 高清国产福利在线观看| 伊人av免费在线观看| 日本免费一二区| www.综合网.com| 国产成人午夜电影| 久热久热免费视频中文字幕777| 超碰在线最新网址| 国产a国产a国产a| 国产激情在线观看| 二人午夜免费观看在线视频| 国产理论片免费观看| 最爽无遮挡行房视频在线| 一级片在线免费看| 欧美激情一级二级三级在线视频| 狠狠v欧美ⅴ日韩v亚洲v大胸| 亚洲国产成人在人网站天堂| 国产欧美日本亚洲精品一4区| 黑人巨大狂躁日本妞在线观看| 巨大荫蒂视频欧美大片| 久久香蕉综合色一综合色88| 超碰免费在线播放| av免费看大片| 玖玖在线视频| 国产人成网在线播放va免费| 国产女王在线**视频| 日本免费视频www| 免费a级毛片永久免费| 精品剧情v国产在线观看| 欧美成人二区| 在线观看精品自拍视频| 伊人影院蕉久影院在线播放| 青青草视频在线免费观看| 美女永久在线网站| 国产精选在线观看| eeuss影影院www在线播放| 99国产牛牛视频在线网站| 极品白浆推特女神在线观看| 天堂√中文在线| 69av二区| 在线免费日韩| 九九热在线视频免费观看| 欧洲毛片在线| 久久爱www| 日本美女在线中文版| 在线视频观看国产| 黄网在线免费看| 日本天堂在线观看| 精品一二三区视频| h视频免费网站| 精品久久久久一区二区三区| 色综合久久五月天| 99re6在线视频|