日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

pyppeteer:比 selenium 更高效的爬虫利器

發布時間:2024/7/23 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 pyppeteer:比 selenium 更高效的爬虫利器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

API 接口文檔:API Reference:https://miyakogi.github.io/pyppeteer/reference.html

pyppeteer?github 地址:https://github.com/miyakogi/pyppeteer

pyppeteer??英文文檔地址:https://miyakogi.github.io/pyppeteer/
pyppeteer?官方文檔 API Reference :https://miyakogi.github.io/pyppeteer/reference.html

puppeteer( Nodejs 版 selenium )快速入門:https://blog.csdn.net/freeking101/article/details/91542887

python爬蟲利器 pyppeteer(模擬瀏覽器) 實戰:https://blog.csdn.net/xiaoming0018/article/details/89841728

重點:pyppeteer使用遇到的 bug 及解決方法:http://www.sanfenzui.com/pyppeteer-bug-collection.html

pyppeteer 進階技巧 (?Xvfb 配合實現 headless 效果 ):https://www.cnblogs.com/dyfblog/p/10887940.html

Python 爬蟲之pyppeteer 的使用(爬蟲、獲取cookie、截屏插件、防爬繞過):https://mohen.blog.csdn.net/article/details/107312709

爬蟲神器 Pyppeteer 的使用:https://blog.csdn.net/weixin_38819889/article/details/108684254

?

?

Pyppeteer 簡介

?

提起 selenium 想必大家都不陌生,作為一款知名的 Web 自動化測試框架,selenium 支持多款主流瀏覽器,提供了功能豐富的API 接口,經常被我們用作爬蟲工具來使用。但是 selenium 的缺點也很明顯,比如速度太慢、對版本配置要求嚴苛,最麻煩是經常要更新對應的驅動還有些網頁是可以檢測到是否是使用了selenium?。并且selenium 所謂的保護機制不允許跨域 cookies 保存以及登錄的時候必須先打開網頁然后后加載 cookies 再刷新的方式很不友好。

今天就給大家介紹另一款 web 自動化測試工具?Pyppeteer,雖然支持的瀏覽器比較單一,但在安裝配置的便利性和運行效率方面都要遠勝 selenium。

介紹 Pyppeteer 之前先說一下 Puppeteer,Puppeteer 是 Google 基于 Node.js 開發的一個工具,主要是用來操縱 Chrome? 瀏覽器的 API,通過 Javascript 代碼來操縱 Chrome 瀏覽器的一些操作,用作網絡爬蟲完成數據爬取、Web 程序自動測試等任務。其 API 極其完善,功能非常強大。 而 Pyppeteer 又是什么呢?它實際上是 Puppeteer 的 Python 版本的實現,但他不是 Google 開發的,是一位來自于日本的工程師依據 Puppeteer 的一些功能開發出來的非官方版本。

Pyppeteer 其實是 Puppeteer 的 Python 版本。pyppeteer 模塊看不懂就去看puppeteer文檔,pyppeteer 只是在 puppeteer之上稍微包裝了下而已 。

注意:本來 chrome 就問題多多,puppeteer 也是各種坑,加上 pyppeteer 是基于前者的改編 python 版本,也就是產生了只要前兩個有一個有 bug,那么 pyppeteer 就會原封不動的繼承下來,本來這沒什么,但是現在遇到的問題就是 pyppeteer 這個項目從2018年9月份之后幾乎沒更新過,前兩者都在不斷的更新迭代,而 pyppeteer 一直不更新,導致很多 bug 根本沒人修復。

?

下面簡單介紹下 Pyppeteer 的兩大特點:chromium 瀏覽器 和 asyncio框架:

?

1).chromium

Chromium 是一款獨立的瀏覽器,是 Google 為發展自家的瀏覽器 Google Chrome 而開啟的計劃,相當于 Chrome的實驗版,且 Chromium 是完全開源的。二者基于相同的源代碼構建,Chrome 所有的新功能都會先在 Chromium 上實現,待驗證穩定后才會移植,因此 Chromium 的版本更新頻率更高,也會包含很多新的功能,但作為一款獨立的瀏覽器,Chromium 的用戶群體要小眾得多。兩款瀏覽器“同根同源”,它們有著同樣的 Logo,但配色不同,Chrome 由藍紅綠黃四種顏色組成,而 Chromium 由不同深度的藍色構成。

Pyppeteer 的 web 自動化是基于 chromium 來實現的,由于 chromium 中某些特性的關系,Pyppeteer 的安裝配置非常簡單,關于這一點稍后我們會詳細介紹。

?

2).asyncio

asyncio 是 Python 的一個異步協程庫,自3.4版本引入的標準庫,直接內置了對異步IO的支持,號稱是Python最有野心的庫,官網上有非常詳細的介紹:https://docs.python.org/3/library/asyncio.html

?

?

安裝與使用

?

由于 Pyppeteer 采用了 Python 的 async 機制,所以其運行要求的 Python 版本為 3.5 及以上

?

1).極簡安裝

使用 pip3 install pyppeteer 命令就能完成 pyppeteer 庫的安裝,至于 chromium 瀏覽器,只需要一條 pyppeteer-install 命令就會自動下載對應的最新版本 chromium 瀏覽器到 pyppeteer 的默認位置。

window 下 安裝完?pyppeteer ,會在 python 安裝目錄下的?Scripts 目錄下 有?pyppeteer-install.exe 和?pyppeteer-install-script.py 兩個文件,執行 任意一個都可以安裝?chromium 瀏覽器到 pyppeteer 的默認位置。

運行?pyppeteer-install.exe :

如果不運行 pyppeteer-install 命令,在第一次使用 pyppeteer 的時候也會自動下載并安裝 chromium 瀏覽器,效果是一樣的。總的來說,pyppeteer 比起 selenium 省去了 driver 配置的環節。

當然,出于某種原因(需要梯子,或者科學上網),也可能會出現chromium自動安裝無法順利完成的情況,這時可以考慮手動安裝:首先,從下列網址中找到自己系統的對應版本,下載chromium壓縮包;

'linux': 'https://storage.googleapis.com/chromium-browser-snapshots/Linux_x64/575458/chrome-linux.zip'
'mac': 'https://storage.googleapis.com/chromium-browser-snapshots/Mac/575458/chrome-mac.zip'
'win32': 'https://storage.googleapis.com/chromium-browser-snapshots/Win/575458/chrome-win32.zip'
'win64': 'https://storage.googleapis.com/chromium-browser-snapshots/Win_x64/575458/chrome-win32.zip'

然后,將壓縮包放到pyppeteer的指定目錄下解壓縮,windows系統的默認目錄。

其他系統下的默認目錄可以參照下面:

  • Windows:?C:\Users\<username>\AppData\Local\pyppeteer
  • OS X:?/Users/<username>/Library/Application?Support/pyppeteer
  • Linux:?/home/<username>/.local/share/pyppeteer
    • or in?$XDG_DATA_HOME/pyppeteer?if?$XDG_DATA_HOME?is defined.

Details see?appdirs’s?user_data_dir.

好了,安裝完成之后我們命令行下測試下:
>>> import pyppeteer
如果沒有報錯,那么就證明安裝成功了。

?

2).使用

Pyppeteer 是一款非常高效的 web 自動化測試工具,由于 Pyppeteer 是基于 asyncio 構建的它的所有 屬性 和方法 幾乎都是 coroutine (協程) 對象因此在構建異步程序的時候非常方便,天生就支持異步運行。

程序構建的基本思路是新建 一個 browser 瀏覽器 一個 頁面 page

看下面這段代碼,在 main 函數中,先是建立一個瀏覽器對象,然后打開新的標簽頁,訪問百度主頁,對當前頁面截圖并保存為“example.png”,最后關閉瀏覽器。前文也提到過,pyppeteer 是基于 asyncio 構建的,所以在使用的時候需要用到 async/await 結構。

import asyncio from pyppeteer import launchasync def main():browser = await launch()page = await browser.newPage()await page.goto('http://baidu.com')await page.screenshot({'path': 'example.png'})await browser.close()asyncio.get_event_loop().run_until_complete(main())

運行上面這段代碼會發現并沒有瀏覽器彈出運行,這是因為 Pyppeteer 默認使用的是無頭瀏覽器,如果想要瀏覽器顯示,需要在launch 函數中設置參數 “headless =False”,程序運行結束后在同一目錄下會出現截取到的網頁圖片:

?

遇到的錯誤

?

  • 1)pyppeteer.errors.NetworkError: Protocol error Network.getCookies: Target close

控制訪問指定 url 之后 await page.goto(url),會遇到上面的錯誤,如果這時候使用了 sleep 之類的延時也會出現這個錯誤或者類似的 time out。?
這個問題是 puppeteer 的 bug,但是對方已經修復了,而 pyppeteer 遲遲沒更新,就只能靠自己了,搜了很多人的文章,例如:https://github.com/miyakogi/pyppeteer/issues/171 ,但是我按照這個并沒有成功。也有人增加一個函數,但調用這個參數依然沒解決問題。

async def scroll_page(page):cur_dist = 0height = await page.evaluate("() => document.body.scrollHeight")while True:if cur_dist < height:await page.evaluate("window.scrollBy(0, 500);")await asyncio.sleep(0.1)cur_dist += 500else:break

可以把 python 第三方庫 websockets 版本 7.0 改為 6.0 就可以了,親測可用。

pip uninstall websockets #卸載websocketspip install websockets==6.0 或者 pip install websockets==6.0 --force-reinstall #指定安裝6.0版本

?

  • 2)chromium瀏覽器多開頁面卡死問題。

解決這個問題的方法就是瀏覽器初始化的時候添加'dumpio':True。

# 啟動 pyppeteer 屬于內存中實現交互的模擬器 browser = await launch({'headless': False, 'args': ['--no-sandbox'], 'dumpio': True})
  • 3)瀏覽器窗口很大,內容顯示很小。

需要設置瀏覽器顯示大小,默認就是無法正常顯示。可以看到頁面左側右側都是空白,網站內容并沒有完整鋪滿chrome.

# Pyppeteer 支持字典 和 關鍵字傳參,Puppeteer 只支持字典傳參。 # 這里使用字典傳參 browser = await launch({'headless': False, 'dumpio': True, 'autoClose': False, 'args': ['--no-sandbox', '--window-size=1366,850']} ) await page.setViewport({'width': 1366, 'height': 768})

通過上面設置Windows-size和Viewport大小來實現網頁完整顯示。

但是對于那種向下無限加載的長網頁這種情況如果瀏覽器是可見狀態會顯示不全,針對這種情況的解決方法就是復制當前網頁新開一個標簽頁粘貼進去就正常了

?

Pyppeteer 和 Puppeteer 的 不同點

  • Pyppeteer支持字典和關鍵字傳參,Puppeteer只支持字典傳參
# Puppeteer只支持字典傳參 browser = await launch({'headless': True}) # Pyppeteer支持字典和關鍵字傳參 browser = await launch({'headless': True}) browser = await launch(headless=True)
  • 元素選擇器方法名 $變為querySelector
# Puppeteer使用$符 Page.$()/Page.$$()/Page.$x() # Pyppeteer使用Python風格的函數名 Page.querySelector()/Page.querySelectorAll()/Page.xpath() # 簡寫方式為: Page.J(), Page.JJ(), and Page.Jx()
  • Page.evaluate() 和 Page.querySelectorEval()的參數

Puppeteer的evaluate()方法使用JavaScript原生函數或JavaScript表達式字符串。Pyppeteer的evaluate()方法只使用JavaScript字符串,該字符串可以是函數也可以是表達式,Pyppeteer會進行自動判斷。但有時會判斷錯誤,如果字符串被判斷成了函數,并且報錯,可以添加選項force_expr=True,強制Pyppeteer作為表達式處理。

獲取頁面內容:

content = await page.evaluate('document.body.textContent', force_expr=True)

獲取元素的內部文字:

element = await page.querySelector('h1') title = await page.evaluate('(element) => element.textContent', element)

?

基礎用法

?

抓取內容 ?可以使用 xpath 表達式
"""
# Pyppeteer 三種解析方式
? ? Page.querySelector()? ? ? # 選擇器
? ? Page.querySelectorAll()
? ? Page.xpath()? ? ? ? ? ? ? ? ? ?# xpath ?表達式
# 簡寫方式為:
? ? Page.J(), Page.JJ(), and Page.Jx()
"""

示例 1 :

import asyncio from pyppeteer import launchasync def main():# headless參數設為False,則變成有頭模式# Pyppeteer支持字典和關鍵字傳參,Puppeteer只支持字典傳參# 指定引擎路徑# exepath = r'C:\Users\Administrator\AppData\Local\pyppeteer\pyppeteer\local-chromium\575458\chrome-win32/chrome.exe'# browser = await launch({'executablePath': exepath, 'headless': False, 'slowMo': 30})browser = await launch(# headless=False,{'headless': False})page = await browser.newPage()# 設置頁面視圖大小await page.setViewport(viewport={'width': 1280, 'height': 800})# 是否啟用JS,enabled設為False,則無渲染效果await page.setJavaScriptEnabled(enabled=True)# 超時間見 1000 毫秒res = await page.goto('https://www.toutiao.com/', options={'timeout': 1000})resp_headers = res.headers # 響應頭resp_status = res.status # 響應狀態# 等待await asyncio.sleep(2)# 第二種方法,在while循環里強行查詢某元素進行等待while not await page.querySelector('.t'):pass# 滾動到頁面底部await page.evaluate('window.scrollBy(0, document.body.scrollHeight)')await asyncio.sleep(2)# 截圖 保存圖片await page.screenshot({'path': 'toutiao.png'})# 打印頁面cookiesprint(await page.cookies())""" 打印頁面文本 """# 獲取所有 html 內容print(await page.content())# 在網頁上執行js 腳本dimensions = await page.evaluate(pageFunction='''() => {return {width: document.documentElement.clientWidth, // 頁面寬度height: document.documentElement.clientHeight, // 頁面高度deviceScaleFactor: window.devicePixelRatio, // 像素比 1.0000000149011612}}''', force_expr=False) # force_expr=False 執行的是函數print(dimensions)# 只獲取文本 執行 js 腳本 force_expr 為 True 則執行的是表達式content = await page.evaluate(pageFunction='document.body.textContent', force_expr=True)print(content)# 打印當前頁標題print(await page.title())# 抓取新聞內容 可以使用 xpath 表達式"""# Pyppeteer 三種解析方式Page.querySelector() # 選擇器Page.querySelectorAll()Page.xpath() # xpath 表達式# 簡寫方式為:Page.J(), Page.JJ(), and Page.Jx()"""element = await page.querySelector(".feed-infinite-wrapper > ul>li") # 紙抓取一個print(element)# 獲取所有文本內容 執行 jscontent = await page.evaluate('(element) => element.textContent', element)print(content)# elements = await page.xpath('//div[@class="title-box"]/a')elements = await page.querySelectorAll(".title-box a")for item in elements:print(await item.getProperty('textContent'))# <pyppeteer.execution_context.JSHandle object at 0x000002220E7FE518># 獲取文本title_str = await (await item.getProperty('textContent')).jsonValue()# 獲取鏈接title_link = await (await item.getProperty('href')).jsonValue()print(title_str)print(title_link)# 關閉瀏覽器await browser.close()asyncio.get_event_loop().run_until_complete(main())

示例 2 :

import asyncio import pyppeteer from collections import namedtupleheaders = {'date': 'Sun, 28 Apr 2019 06:50:20 GMT','server': 'Cmcc','x-frame-options': 'SAMEORIGIN\nSAMEORIGIN','last-modified': 'Fri, 26 Apr 2019 09:58:09 GMT','accept-ranges': 'bytes','cache-control': 'max-age=43200','expires': 'Sun, 28 Apr 2019 18:50:20 GMT','vary': 'Accept-Encoding,User-Agent','content-encoding': 'gzip','content-length': '19823','content-type': 'text/html','connection': 'Keep-alive','via': '1.1 ID-0314217270751344 uproxy-17' }Response = namedtuple("rs", "title url html cookies headers history status")async def get_html(url):browser = await pyppeteer.launch(headless=True, args=['--no-sandbox'])page = await browser.newPage()res = await page.goto(url, options={'timeout': 10000})data = await page.content()title = await page.title()resp_cookies = await page.cookies() # cookieresp_headers = res.headers # 響應頭resp_status = res.status # 響應狀態print(data)print(title)print(resp_headers)print(resp_status)return titleif __name__ == '__main__':url_list = ["https://www.toutiao.com","http://jandan.net/ooxx/page-8#comments","https://www.12306.cn/index"]task = [get_html(url) for url in url_list]loop = asyncio.get_event_loop()results = loop.run_until_complete(asyncio.gather(*task))for res in results:print(res)

?

模擬輸入

模擬輸入文本:

# 模擬輸入 賬號密碼 {'delay': rand_int()} 為輸入時間 await page.type('#TPL_username_1', "sadfasdfasdf") await page.type('#TPL_password_1', "123456789", )await page.waitFor(1000) await page.click("#J_SubmitStatic")

使用 tkinter 獲取頁面高度 寬度

def screen_size():"""使用tkinter獲取屏幕大小"""import tkintertk = tkinter.Tk()width = tk.winfo_screenwidth()height = tk.winfo_screenheight()tk.quit()return width, height

?

爬取京東商城

示例代碼:

import requests from bs4 import BeautifulSoup from pyppeteer import launch import asynciodef screen_size():"""使用tkinter獲取屏幕大小"""import tkintertk = tkinter.Tk()width = tk.winfo_screenwidth()height = tk.winfo_screenheight()tk.quit()return width, heightasync def main(url):# browser = await launch({'headless': False, 'args': ['--no-sandbox'], })browser = await launch({'args': ['--no-sandbox'], })page = await browser.newPage()width, height = screen_size()await page.setViewport(viewport={"width": width, "height": height})await page.setJavaScriptEnabled(enabled=True)await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ''(KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299')await page.goto(url)# await asyncio.sleep(2)await page.evaluate('window.scrollBy(0, document.body.scrollHeight)')await asyncio.sleep(1)# content = await page.content()li_list = await page.xpath('//*[@id="J_goodsList"]/ul/li')# print(li_list)item_list = []for li in li_list:a = await li.xpath('.//div[@class="p-img"]/a')detail_url = await (await a[0].getProperty("href")).jsonValue()promo_words = await (await a[0].getProperty("title")).jsonValue()a_ = await li.xpath('.//div[@class="p-commit"]/strong/a')p_commit = await (await a_[0].getProperty("textContent")).jsonValue()i = await li.xpath('./div/div[3]/strong/i')price = await (await i[0].getProperty("textContent")).jsonValue()em = await li.xpath('./div/div[4]/a/em')title = await (await em[0].getProperty("textContent")).jsonValue()item = {"title": title,"detail_url": detail_url,"promo_words": promo_words,'p_commit': p_commit,'price': price}item_list.append(item)# print(item)# break# print(content)await page_close(browser)return item_listasync def page_close(browser):for _page in await browser.pages():await _page.close()await browser.close()msg = "手機" url = "https://search.jd.com/Search?keyword={}&enc=utf-8&qrst=1&rt=1&stop=1&vt=2&wq={}&cid2=653&cid3=655&page={}"task_list = [] for i in range(1, 6):page = i * 2 - 1url = url.format(msg, msg, page)task_list.append(main(url))loop = asyncio.get_event_loop() results = loop.run_until_complete(asyncio.gather(*task_list)) # print(results, len(results)) for i in results:print(i, len(i))print('*' * 100) # soup = BeautifulSoup(content, 'lxml') # div = soup.find('div', id='J_goodsList') # for i, li in enumerate(div.find_all('li', class_='gl-item')): # if li.select('.p-img a'): # print(li.select('.p-img a')[0]['href'], i) # print(li.select('.p-price i')[0].get_text(), i) # print(li.select('.p-name em')[0].text, i) # else: # print("#" * 200) # print(li)

?

抓取淘寶

示例代碼:

# -*- coding: utf-8 -*-import time import random import asyncio from retrying import retry # 錯誤自動重試 from pyppeteer.launcher import launchjs1 = '''() =>{Object.defineProperties(navigator,{ webdriver:{ get: () => false}})}''' js2 = '''() => {alert(window.navigator.webdriver)}''' js3 = '''() => {window.navigator.chrome = {runtime: {}, }; }''' js4 = '''() =>{Object.defineProperty(navigator, 'languages', {get: () => ['en-US', 'en']});}''' js5 = '''() =>{Object.defineProperty(navigator, 'plugins', {get: () => [1, 2, 3, 4, 5,6],});}'''def retry_if_result_none(result):return result is None@retry(retry_on_result=retry_if_result_none, ) async def mouse_slide(page=None):await asyncio.sleep(3)try:await page.hover('#nc_1_n1z')await page.mouse.down()await page.mouse.move(2000, 0, {'delay': random.randint(1000, 2000)})await page.mouse.up()except Exception as e:print(e, ' :slide login False')return Noneelse:await asyncio.sleep(3)slider_again = await page.Jeval('.nc-lang-cnt', 'node => node.textContent')if slider_again != '驗證通過':return Noneelse:await page.screenshot({'path': './headless-slide-result.png'})print('驗證通過')return 1def input_time_random():return random.randint(100, 151)def screen_size():"""使用tkinter獲取屏幕大小"""import tkintertk = tkinter.Tk()width = tk.winfo_screenwidth()height = tk.winfo_screenheight()tk.quit()return width, heightasync def main(username, pwd, url):browser = await launch({'headless': False, 'args': ['--no-sandbox'], },userDataDir='./userdata',args=['--window-size=1366,768'])page = await browser.newPage()width, height = screen_size()await page.setViewport(viewport={"width": width, "height": height})await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ''(KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299')await page.goto(url)await page.evaluate(js1)await page.evaluate(js3)await page.evaluate(js4)await page.evaluate(js5)pwd_login = await page.querySelector('.J_Quick2Static')# print(await (await pwd_login.getProperty('textContent')).jsonValue())await pwd_login.click()await page.type('#TPL_username_1', username, {'delay': input_time_random() - 50})await page.type('#TPL_password_1', pwd, {'delay': input_time_random()})await page.screenshot({'path': './headless-test-result.png'})time.sleep(2)slider = await page.Jeval('#nocaptcha', 'node => node.style') # 是否有滑塊if slider:print('出現滑塊情況判定')await page.screenshot({'path': './headless-login-slide.png'})flag = await mouse_slide(page=page)if flag:print(page.url)await page.keyboard.press('Enter')await get_cookie(page)else:await page.keyboard.press('Enter')await page.waitFor(20)await page.waitForNavigation()try:global errorerror = await page.Jeval('.error', 'node => node.textContent')except Exception as e:error = Noneprint(e, "錯啦")finally:if error:print('確保賬戶安全重新入輸入')else:print(page.url)# 可繼續網頁跳轉 已經攜帶 cookie# await get_search(page)await get_cookie(page)await page_close(browser)async def page_close(browser):for _page in await browser.pages():await _page.close()await browser.close()async def get_search(page):# https://s.taobao.com/search?q={查詢的條件}&p4ppushleft=1%2C48&s={每頁 44 條 第一頁 0 第二頁 44}&sort=sale-descawait page.goto("https://s.taobao.com/search?q=氣球")await asyncio.sleep(5)# print(await page.content())# 獲取登錄后cookie async def get_cookie(page):res = await page.content()cookies_list = await page.cookies()cookies = ''for cookie in cookies_list:str_cookie = '{0}={1};'str_cookie = str_cookie.format(cookie.get('name'), cookie.get('value'))cookies += str_cookieprint(cookies)# 將cookie 放入 cookie 池 以便多次請求 封賬號 利用cookie 對搜索內容進行爬取return cookiesif __name__ == '__main__':tb_username = '淘寶用戶名'tb_pwd = '淘寶密碼'tb_url = "https://login.taobao.com/member/login.jhtml"loop = asyncio.get_event_loop()loop.run_until_complete(main(tb_username, tb_pwd, tb_url))

?

利用 上面 獲取到的 cookie 爬取搜索內容

示例代碼:

import json import requests import re# 設置 cookie 池 隨機發送請求 通過 pyppeteer 獲取 cookie cookie = '_tb_token_=edd7e354dee53;t=fed8f4ca1946ca1e73223cfae04bc589;sg=20f;cna=2uJSFdQGmDMCAbfFWXWAC4Jv;cookie2=1db6cd63ad358170ea13319f7a862c33;_l_g_=Ug%3D%3D;v=0;unb=3150916610;skt=49cbfd5e01d1b550;cookie1=BxVRmD3sh19TaAU6lH88bHw5oq%2BgcAGcRe229Hj5DTA%3D;csg=cf45a9e2;uc3=vt3=F8dByEazRMnQZDe%2F9qI%3D&id2=UNGTqfZ61Z3rsA%3D%3D&nk2=oicxO%2BHX4Pg%3D&lg2=U%2BGCWk%2F75gdr5Q%3D%3D;existShop=MTU1Njg3MDM3MA%3D%3D;tracknick=%5Cu7433150322;lgc=%5Cu7433150322;_cc_=V32FPkk%2Fhw%3D%3D;mt=ci=86_1;dnk=%5Cu7433150322;_nk_=%5Cu7433150322;cookie17=UNGTqfZ61Z3rsA%3D%3D;tg=0;enc=tThHs6Sn3BAl8v1fu3J4tMpgzA1n%2BLzxjib0vDAtGsXJCb4hqQZ7Z9fHIzsN0WghdcKEsoeKz6mBwPUpyzLOZw%3D%3D;JSESSIONID=B3F383B3467EC60F8CA425935232D395;l=bBMspAhrveV5732DBOCanurza77OSIRYYuPzaNbMi_5pm6T_G4QOlC03xF96VjfRswYBqh6Mygv9-etuZ;hng=CN%7Czh-CN%7CCNY%7C156;isg=BLi41Q8PENDal3xUVsA-aPbfiWaKiRzB6vcTu_IpBPOmDVj3mjHsO86vxUQYW9SD;uc1=cookie16=W5iHLLyFPlMGbLDwA%2BdvAGZqLg%3D%3D&cookie21=W5iHLLyFeYZ1WM9hVnmS&cookie15=UIHiLt3xD8xYTw%3D%3D&existShop=false&pas=0&cookie14=UoTZ4ttqLhxJww%3D%3D&tag=8&lng=zh_CN;thw=cn;x=e%3D1%26p%3D*%26s%3D0%26c%3D0%26f%3D0%26g%3D0%26t%3D0;swfstore=34617;'headers = {'cookie': cookie,"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36" }rep = requests.get('https://s.taobao.com/search?q=手機&p4ppushleft=1%2C48&s=0&sort=sale-desc ', headers=headers) rep.encoding = 'utf-8' res = rep.text print(res)r = re.compile(r'g_page_config = (.*?)g_srp_loadCss', re.S) res = r.findall(res)data = res[0].strip().rstrip(';') dic_data = json.loads(data) auctions = dic_data.get('mods')['itemlist']['data']['auctions']# print(auctions,len(auctions)) for item in auctions[1:]:print(item)break

?

針對iframe 的操作

  • page.frames 獲取所有的 iframe 列表 需要判斷操作的是哪一個 iframe 跟操作 page 一樣操作
from pyppeteer import launch import asyncioasync def main(url):w = await launch({'headless': False, 'args': ['--no-sandbox'], })page = await w.newPage()await page.setViewport({"width": 1366, 'height': 800})await page.goto(url)try:await asyncio.sleep(1)frame = page.framesprint(frame) # 需要找到是哪一個 frametitle = await frame[1].title()print(title)await asyncio.sleep(1)login = await frame[1].querySelector('#switcher_plogin')print(login)await login.click()await asyncio.sleep(20)except Exception as e:print(e, "EEEEEEEEE")for _page in await w.pages():await _page.close()await w.close()asyncio.get_event_loop().run_until_complete(main("https://i.qq.com/?rd=1")) # asyncio.get_event_loop().run_until_complete(main("https://www.gushici.com/"))

?

與 scrapy 的整合

加入downloadmiddleware

from scrapy import signals from scrapy.downloadermiddlewares.useragent import UserAgentMiddleware import random import pyppeteer import asyncio import os from scrapy.http import HtmlResponsepyppeteer.DEBUG = False class FundscrapyDownloaderMiddleware(object):# Not all methods need to be defined. If a method is not defined,# scrapy acts as if the downloader middleware does not modify the# passed objects.def __init__(self) :print("Init downloaderMiddleware use pypputeer.")os.environ['PYPPETEER_CHROMIUM_REVISION'] ='588429'# pyppeteer.DEBUG = Falseprint(os.environ.get('PYPPETEER_CHROMIUM_REVISION'))loop = asyncio.get_event_loop()task = asyncio.ensure_future(self.getbrowser())loop.run_until_complete(task)#self.browser = task.result()print(self.browser)print(self.page)# self.page = await browser.newPage()async def getbrowser(self):self.browser = await pyppeteer.launch()self.page = await self.browser.newPage()# return await pyppeteer.launch()async def getnewpage(self): return await self.browser.newPage()@classmethoddef from_crawler(cls, crawler):# This method is used by Scrapy to create your spiders.s = cls()crawler.signals.connect(s.spider_opened, signal=signals.spider_opened)return sdef process_request(self, request, spider):# Called for each request that goes through the downloader# middleware.# Must either:# - return None: continue processing this request# - or return a Response object# - or return a Request object# - or raise IgnoreRequest: process_exception() methods of# installed downloader middleware will be calledloop = asyncio.get_event_loop()task = asyncio.ensure_future(self.usePypuppeteer(request))loop.run_until_complete(task)# return task.result()return HtmlResponse(url=request.url, body=task.result(), encoding="utf-8",request=request)async def usePypuppeteer(self, request):print(request.url)# page = await self.browser.newPage()await self.page.goto(request.url)content = await self.page.content()return content def process_response(self, request, response, spider):# Called with the response returned from the downloader.# Must either;# - return a Response object# - return a Request object# - or raise IgnoreRequestreturn responsedef process_exception(self, request, exception, spider):# Called when a download handler or a process_request()# (from other downloader middleware) raises an exception.# Must either:# - return None: continue processing this exception# - return a Response object: stops process_exception() chain# - return a Request object: stops process_exception() chainpassdef spider_opened(self, spider):spider.logger.info('Spider opened: %s' % spider.name)

?

?

實戰 異步爬取

?

示例 1 :快速上手

接下來我們測試下基本的頁面渲染操作,這里我們選用的網址為:http://quotes.toscrape.com/js/,這個頁面是 JavaScript 渲染而成的,用基本的 requests 庫請求得到的 HTML 結果里面是不包含頁面中所見的條目內容的。

為了證明 requests 無法完成正常的抓取,我們可以先用如下代碼來測試一下:

import requests from pyquery import PyQuery as pqurl = 'http://quotes.toscrape.com/js/' response = requests.get(url=url) doc = pq(response.text) print('Quotes : {0}'.format(doc('.quote').length))# 結果 # Quotes : 0

這里首先使用 requests 來請求網頁內容,然后使用 pyquery 來解析頁面中的每一個條目。觀察源碼之后我們發現每個條目的 class 名為 quote,所以這里選用了 .quote 這個 CSS 選擇器來選擇,最后輸出條目數量。

運行結果:Quotes: 0

結果是 0,這就證明使用 requests 是無法正常抓取到相關數據的。

為什么?

因為這個頁面是 JavaScript 渲染而成的,我們所看到的內容都是網頁加載后又執行了 JavaScript 之后才呈現出來的,因此這些條目數據并不存在于原始 HTML 代碼中,而 requests 僅僅抓取的是原始 HTML 代碼。

好的,所以遇到這種類型的網站我們應該怎么辦呢?

其實答案有很多:

  • 分析網頁源代碼數據,如果數據是隱藏在 HTML 中的其他地方,以 JavaScript 變量的形式存在,直接提取就好了。
  • 分析 Ajax,很多數據可能是經過 Ajax 請求時候獲取的,所以可以分析其接口。
  • 模擬 JavaScript 渲染過程,直接抓取渲染后的結果。
  • 而 Pyppeteer 和 Selenium 就是用的第三種方法,下面我們再用 Pyppeteer 來試試,如果用 Pyppeteer 實現如上頁面的抓取的話,代碼就可以寫為如下形式:

    import asyncio from pyppeteer import launch from pyquery import PyQuery as pqasync def main():browser = await launch()page = await browser.newPage()url = 'http://quotes.toscrape.com/js/'await page.goto(url=url)doc = pq(await page.content())print('Quotes : {0}'.format(doc('.quote').length))await browser.close()asyncio.get_event_loop().run_until_complete(main())

    運行結果:Quotes: 10
    看運行結果,這說明我們就成功匹配出來了 class 為 quote 的條目,總數為 10 條,具體的內容可以進一步使用 pyquery 解析查看。

    那么這里面的過程發生了什么?

    實際上,Pyppeteer 整個流程就完成了瀏覽器的開啟、新建頁面、頁面加載等操作。另外 Pyppeteer 里面進行了異步操作,所以需要配合 async/await 關鍵詞來實現。首先, launch 方法會新建一個 Browser 對象,然后賦值給 browser,然后調用 newPage 方法相當于瀏覽器中新建了一個選項卡,同時新建了一個 Page 對象。然后 Page 對象調用了 goto 方法就相當于在瀏覽器中輸入了這個 URL,瀏覽器跳轉到了對應的頁面進行加載,加載完成之后再調用 content 方法,返回當前瀏覽器頁面的源代碼。然后進一步地,我們用 pyquery 進行同樣地解析,就可以得到 JavaScript 渲染的結果了。另外其他的一些方法如調用 asyncio 的 get_event_loop 等方法的相關操作則屬于 Python 異步 async 相關的內容了,大家如果不熟悉可以了解下 Python 的 async/await 的相關知識。好,通過上面的代碼,我們就可以完成 JavaScript 渲染頁面的爬取了。

    ?

    模擬網頁截圖,保存 PDF,執行自定義的 JavaScript 獲得特定的內容

    接下來我們再看看另外一個例子,這個例子可以模擬網頁截圖,保存 PDF,另外還可以執行自定義的 JavaScript 獲得特定的內容,代碼如下:

    import asyncio from pyppeteer import launchasync def main():browser = await launch()page = await browser.newPage()url = 'http://quotes.toscrape.com/js/'await page.goto(url=url)await page.screenshot(path='test_screenshot.png')await page.pdf(path='test_pdf.pdf')# 在網頁上執行js 腳本dimensions = await page.evaluate(pageFunction='''() => {return {width: document.documentElement.clientWidth, // 頁面寬度height: document.documentElement.clientHeight, // 頁面高度deviceScaleFactor: window.devicePixelRatio, // 像素比 1.0000000149011612}}''', force_expr=False) # force_expr=False 執行的是函數print(dimensions)await browser.close()asyncio.get_event_loop().run_until_complete(main())# 結果 # {'width': 800, 'height': 600, 'deviceScaleFactor': 1}

    這里我們又用到了幾個新的 API,完成了網頁截圖保存、網頁導出 PDF 保存、執行 JavaScript 并返回對應數據。

    ?evaluate 方法執行了一些 JavaScript,JavaScript 傳入的是一個函數,使用 return 方法返回了網頁的寬高、像素大小比率三個值,最后得到的是一個 JSON 格式的對象。

    總之利用 Pyppeteer 我們可以控制瀏覽器執行幾乎所有動作,想要的操作和功能基本都可以實現,用它來自由地控制爬蟲當然就不在話下了。

    了解了基本的實例之后,我們再來梳理一下 Pyppeteer 的一些基本和常用操作。Pyppeteer 的幾乎所有功能都能在其官方文檔的 API Reference 里面找到,鏈接為:https://miyakogi.github.io/pyppeteer/reference.html,用到哪個方法就來這里查詢就好了,參數不必死記硬背,即用即查就好。

    ?

    登錄淘寶 (打開網頁后,手動輸入用戶名和密碼,可以看到正常跳轉到登錄后的頁面):

    import asyncio from pyppeteer import launchwidth, height = 1366, 768js1 = '''() =>{Object.defineProperties(navigator,{ webdriver:{ get: () => false}})}''' js2 = '''() => {alert(window.navigator.webdriver)}''' js3 = '''() => {window.navigator.chrome = {runtime: {}, }; }''' js4 = '''() =>{Object.defineProperty(navigator, 'languages', {get: () => ['en-US', 'en']});}''' js5 = '''() =>{Object.defineProperty(navigator, 'plugins', {get: () => [1, 2, 3, 4, 5,6],});}'''async def page_evaluate(page):# 替換淘寶在檢測瀏覽時采集的一些參數# 需要注意,在測試的過程中發現登陸成功后頁面的該屬性又會變成True# 所以在每次重新加載頁面后要重新設置該屬性的值。await page.evaluate('''() =>{ Object.defineProperties(navigator,{ webdriver:{ get: () => false } }) }''')await page.evaluate('''() =>{ window.navigator.chrome = { runtime: {}, }; }''')await page.evaluate('''() =>{ Object.defineProperty(navigator, 'languages', { get: () => ['en-US', 'en'] }); }''')await page.evaluate('''() =>{ Object.defineProperty(navigator, 'plugins', { get: () => [1, 2, 3, 4, 5,6], }); }''')async def main():browser = await launch(headless=False,# userDataDir='./userdata',args=['--disable-infobars', f'--window-size={width},{height}', '--no-sandbox'])page = await browser.newPage()await page.setViewport({"width": width,"height": height})url = 'https://www.taobao.com'await page.goto(url=url)# await page.evaluate(js1)# await page.evaluate(js3)# await page.evaluate(js4)# await page.evaluate(js5)await page_evaluate(page)await asyncio.sleep(100)# await browser.close()asyncio.get_event_loop().run_until_complete(main())

    如果把上面 js 去掉,發現淘寶可以檢測出來, 跳轉不到登錄后的頁面。

    window.navigator 對象包含有關訪問者瀏覽器的信息:https://www.runoob.com/js/js-window-navigator.html

    js 主要需要修改瀏覽器的 window.navigator.webdriver、window.navigator.languages等值。

    打開正常的瀏覽器可以看到:

    window.navigator.webdriver的值為undefined,而通過pyppeteer控制打開的瀏覽器該值為True,當被檢測到該值為True的時候,則滑動會一直失敗,所以我們需要修改該屬性。需要注意,在測試的過程中發現登陸成功后頁面的該屬性又會變成True,所以在每次重新加載頁面后要重新設置該屬性的值。

    async def page_evaluate(page):# 替換淘寶在檢測瀏覽時采集的一些參數await page.evaluate('''() =>{ Object.defineProperties(navigator,{ webdriver:{ get: () => false } }) }''')await page.evaluate('''() =>{ window.navigator.chrome = { runtime: {}, }; }''')await page.evaluate('''() =>{ Object.defineProperty(navigator, 'languages', { get: () => ['en-US', 'en'] }); }''')await page.evaluate('''() =>{ Object.defineProperty(navigator, 'plugins', { get: () => [1, 2, 3, 4, 5,6], }); }''')

    ?

    另一種方法可以進一步免去淘寶登錄的煩惱,那就是設置用戶目錄。

    平時我們已經注意到,當我們登錄淘寶之后,如果下次再次打開瀏覽器發現還是登錄的狀態。這是因為淘寶的一些關鍵 Cookies 已經保存到本地了,下次登錄的時候可以直接讀取并保持登錄狀態。

    那么這些信息保存在哪里了呢?其實就是保存在用戶目錄下了,里面不僅包含了瀏覽器的基本配置信息,還有一些 Cache、Cookies 等各種信息都在里面,如果我們能在瀏覽器啟動的時候讀取這些信息,那么啟動的時候就可以恢復一些歷史記錄甚至一些登錄狀態信息了。

    這也就解決了一個問題:很多朋友在每次啟動 Selenium 或 Pyppeteer 的時候總是是一個全新的瀏覽器,那就是沒有設置用戶目錄,如果設置了它,每次打開就不再是一個全新的瀏覽器了,它可以恢復之前的歷史記錄,也可以恢復很多網站的登錄信息。

    當然可能時間太久了,Cookies 都過期了,那還是需要登錄的。

    那么這個怎么來做呢?很簡單,在啟動的時候設置 userDataDir 就好了,示例如下:

    browser = await launch(headless=False,userDataDir='./userdata',args=['--disable-infobars', f'--window-size={width},{height}'])

    好,這里就是加了一個 userDataDir 的屬性,值為 userdata,即當前目錄的 userdata 文件夾。我們可以首先運行一下,然后登錄一次淘寶,這時候我們同時可以觀察到在當前運行目錄下又多了一個 userdata 的文件夾:

    用戶文件夾

    具體的介紹可以看官方的一些說明,如:https://chromium.googlesource.com/chromium/src/+/master/docs/user_data_dir.md?這里面介紹了 userdatadir 的相關內容。

    ?

    命令行啟動 chrome 并進入指定的 URL:chrome.exe --disable-infobars --user-data-dir="./userdatadir" --new-window https://login.taobao.com/member/login.jhtml

    執行完后會打開 淘寶的登錄頁面,登錄淘寶,然后保存用戶名密碼,這樣登錄信息就保存在?userdatadir 目錄下了

    在執行?chrome.exe --disable-infobars --user-data-dir="./userdatadir" --new-window https://www.taobao.com

    可以看到已經時登錄狀態了。

    ?

    ?

    ?

    示例 2 :爬取今日頭條

    # -*- coding: utf-8 -*- # @Author : # @File : toutiao.py # @Software: PyCharm # @description : XXXimport asyncio from pyppeteer import launch from pyquery import PyQuery as pqdef screen_size():"""使用tkinter獲取屏幕大小"""import tkintertk = tkinter.Tk()width = tk.winfo_screenwidth()height = tk.winfo_screenheight()tk.quit()return width, heightasync def main():width, height = screen_size()print(f'screen : [ width:{width} , height:{height} ]')browser = await launch(headless=False, args=[f'--window-size={width},{height}'])page = await browser.newPage()await page.setViewport({'width': width, 'height': height})# 是否啟用JS,enabled設為False,則無渲染效果await page.setJavaScriptEnabled(enabled=True)await page.goto('https://www.toutiao.com')await asyncio.sleep(5)print(await page.cookies()) # 打印頁面cookiesprint(await page.content()) # 打印頁面文本print(await page.title()) # 打印當前頁標題# 抓取新聞標題title_elements = await page.xpath('//div[@class="title-box"]/a')for item in title_elements:# 獲取文本title_str = await (await item.getProperty('textContent')).jsonValue()print(await item.getProperty('textContent'))# 獲取鏈接title_link = await (await item.getProperty('href')).jsonValue()print(title_str)print(title_link)# 在搜索框中輸入pythonawait page.type('input.tt-input__inner', 'python')# 點擊搜索按鈕await page.click('button.tt-button')await asyncio.sleep(5)# print(page.url)# 今日頭條點擊后新開一個頁面, 通過打印url可以看出page還停留在原頁面# 以下用于切換至新頁面pages = await browser.pages()page = pages[-1]# print(page.url)page_source = await page.content()text = pq(page_source)await page.goto(url="https://www.toutiao.com/api/search/content/?""aid=24&app_name=web_search&offset=60&format=json""&keyword=python&autoload=true&count=20&en_qc=1""&cur_tab=1&from=search_tab&pd=synthesis&timestamp=1555589585193")for i in range(1, 10):print(text("#J_section_{} > div > div > div.normal.rbox > div > div.title-box > a > span".format(i)).text())# 關閉瀏覽器await browser.close()asyncio.get_event_loop().run_until_complete(main())

    示例代碼2:

    import asyncio from pyppeteer import launchasync def main():# headless參數設為False,則變成有頭模式browser = await launch(# headless=False)page = await browser.newPage()# 設置頁面視圖大小await page.setViewport(viewport={'width': 1280, 'height': 800})# 是否啟用JS,enabled設為False,則無渲染效果await page.setJavaScriptEnabled(enabled=True)await page.goto('https://www.toutiao.com/')# 打印頁面cookiesprint(await page.cookies())# 打印頁面文本print(await page.content())# 打印當前頁標題print(await page.title())# 抓取新聞標題title_elements = await page.xpath('//div[@class="title-box"]/a')for item in title_elements:# 獲取文本title_str = await (await item.getProperty('textContent')).jsonValue()print(await item.getProperty('textContent'))# 獲取鏈接title_link = await (await item.getProperty('href')).jsonValue()print(title_str)print(title_link)# 關閉瀏覽器await browser.close()asyncio.get_event_loop().run_until_complete(main())

    ?

    ?百度首頁交互

    示例代碼:

    import time import asyncio from pyppeteer import launchasync def main():browser = await launch(headless=False)page = await browser.newPage()await page.setViewport({'width': 1200, 'height': 800})await page.goto('https://www.baidu.com')# 在搜索框中輸入pythonawait page.type('input#kw.s_ipt','python')# 點擊搜索按鈕await page.click('input#su')# 等待元素加載,第一種方法,強行等待5秒# await asyncio.sleep(5)# 第二種方法,在while循環里強行查詢某元素進行等待while not await page.querySelector('.t'):pass# 滾動到頁面底部await page.evaluate('window.scrollBy(0, window.innerHeight)')# 這些等待方法都不好用# await page.waitForXPath('h3', timeout=300)# await page.waitForNavigation(waitUntil="networkidle0")# await page.waitForFunction('document.getElementByTag("h3")')# await page.waitForSelector('.t')# await page.waitFor('document.querySelector("#t")')# await page.waitForNavigation(waitUntil='networkidle0')# await page.waitForFunction('document.querySelector("").inner??Text.length == 7')title_elements = await page.xpath('//h3[contains(@class,"t")]/a')for item in title_elements:title_str = await (await item.getProperty('textContent')).jsonValue()print(title_str)await browser.close()asyncio.get_event_loop().run_until_complete(main())

    ?

    示例:

    import asyncio import pyppeteer from collections import namedtupleResponse = namedtuple("rs", "title url html cookies headers history status")async def get_html(url, timeout=30):# 默認30sbrowser = await pyppeteer.launch(headless=True, args=['--no-sandbox'])page = await browser.newPage()res = await page.goto(url, options={'timeout': int(timeout * 1000)})data = await page.content()title = await page.title()resp_cookies = await page.cookies()resp_headers = res.headersresp_history = Noneresp_status = res.statusresponse = Response(title=title,url=url,html=data,cookies=resp_cookies,headers=resp_headers,history=resp_history,status=resp_status)return responseif __name__ == '__main__':url_list = ["http://www.10086.cn/index/tj/index_220_220.html","http://www.10010.com/net5/011/",# "http://python.jobbole.com/87541/"]task = (get_html(url) for url in url_list)loop = asyncio.get_event_loop()results = loop.run_until_complete(asyncio.gather(*task))for res in results:print(res.title)

    ?

    ?

    ?

    ?

    ?

    ?

    總結

    以上是生活随笔為你收集整理的pyppeteer:比 selenium 更高效的爬虫利器的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    99热国产在线中文 | www.xxxx欧美 | 啪嗒啪嗒免费观看完整版 | 日本中文字幕一二区观 | 在线精品视频免费播放 | 久久国产成人午夜av影院宅 | 欧美激情综合五月 | 色鬼综合网 | 99精品在线观看 | 日韩大片在线 | 四虎成人在线 | 99视频在线观看免费 | 国产视频1 | 国产成人精品av在线观 | 国产黄在线免费观看 | 美女露久久 | 香蕉视频日本 | 久久网站最新地址 | 国产一性一爱一乱一交 | 久久tv视频| 亚洲欧美va | 97av在线视频 | 久久免费视频精品 | www.在线观看视频 | 中文字幕传媒 | 在线日韩av | 亚洲综合成人av | 天天操人 | 久久免费黄色网址 | 99在线播放| 毛片一区二区 | 国产一区免费在线观看 | 国产精品视频免费观看 | 国产精品xxxx18a99 | 欧美国产高清 | 久久成人人人人精品欧 | 国产视频精品久久 | 91亚洲夫妻 | 亚洲精品视频在线 | 天天干天天干 | 国产精品99久久99久久久二8 | 亚洲综合在 | 久草精品视频 | 婷婷播播网 | 久久艹欧美 | 久久综合桃花 | 欧美 日韩 国产 中文字幕 | 国产在线97 | 日本黄色大片免费 | 五月天综合激情网 | 天天操天天操一操 | 精品美女久久 | 麻花天美星空视频 | 久久久久久高潮国产精品视 | 亚洲国产理论片 | 96久久欧美麻豆网站 | 超碰在线人人97 | 欧美精品久久久久久 | 亚洲禁18久人片 | 色妞久久福利网 | 欧美午夜精品久久久久久浪潮 | 99久久99久国产黄毛片 | 一区二区视频在线免费观看 | 亚洲美女在线一区 | 亚洲激情在线观看 | 在线 国产 亚洲 欧美 | 国产一区二区播放 | 日本mv大片欧洲mv大片 | 国产成人精品av | 国产又粗又猛又爽 | 久久精久久精 | 日韩电影久久久 | 黄色性av | 亚洲国产欧洲综合997久久, | 激情欧美丁香 | 亚洲va男人天堂 | 久久午夜电影 | 天天撸夜夜操 | 日韩 精品 一区 国产 麻豆 | 中文字幕在线观看的网站 | 91看片看淫黄大片 | 六月天综合网 | 欧美激情第八页 | 国产剧在线观看片 | 91视频下载| 九九九视频在线 | 亚洲一区二区三区91 | 麻豆久久精品 | 欧美日韩午夜 | 国产va饥渴难耐女保洁员在线观看 | 在线观看亚洲专区 | 在线观看成人小视频 | 国产老太婆免费交性大片 | 热久久电影 | 国产精品情侣视频 | 欧美了一区在线观看 | 91精品视频在线 | 91完整版在线观看 | 在线观看中文字幕2021 | 亚洲精品国产精品99久久 | 欧美孕妇视频 | 91综合色| 99中文视频在线 | 欧美国产一区二区 | 国产成人精品在线播放 | 91av社区 | 天天操天天干天天 | 久久久精品二区 | 国产精品一区专区欧美日韩 | 亚洲精品免费播放 | 国产一区成人在线 | 国内亚洲精品 | 亚洲欧美视屏 | 国产二级视频 | 中文在线字幕免费观看 | 免费在线黄色av | 在线直播av | 国产成人无码AⅤ片在线观 日韩av不卡在线 | 亚洲一级性 | 国产精品一区二区三区在线播放 | 最近日本中文字幕 | 手机av在线免费观看 | 中文字幕精 | 免费进去里的视频 | 国产在线一区观看 | 在线蜜桃视频 | 西西444www | 国产精品免费大片视频 | 国产人成免费视频 | 亚洲成av人片一区二区梦乃 | 欧美精品国产综合久久 | 成人黄色电影在线 | 色中色亚洲| 蜜桃视频日韩 | 国产在线久久久 | 国产小视频在线看 | 91视频 - 114av| 久久资源总站 | 免费一级黄色 | 视频在线99re | 久久r精品 | 永久免费观看视频 | 狠狠成人 | www.xxx.性狂虐 | 干狠狠| 欧美日韩一区二区三区在线免费观看 | 正在播放日韩 | 91av在线免费观看 | 99欧美视频| 久久精品看片 | 免费91麻豆精品国产自产在线观看 | 黄色成人在线观看 | 在线观看黄色小视频 | av中文国产| 亚洲 欧洲 国产 日本 综合 | 91在线中文字幕 | 91丨九色丨高潮 | 久久一区国产 | 91丨九色丨国产在线观看 | 日韩欧美精品在线视频 | av在线播放中文字幕 | 国产精品久久伊人 | 超薄丝袜一二三区 | 亚洲精品日韩在线观看 | 在线观看免费黄色 | 欧美日韩国产精品一区二区 | 久久夜夜夜| 九九视频免费观看视频精品 | 美女视频免费一区二区 | 日韩在线电影 | 99热在线国产精品 | 色网站在线免费观看 | 国产精品亚州 | 国产首页| 国产区久久| 国产日韩av在线 | 国产精品美女免费视频 | 国产免费观看视频 | 国产一区二区三区四区大秀 | 美女免费视频一区二区 | 日日操狠狠干 | 国产精品一区二区视频 | 99re视频在线观看 | 五月婷婷六月丁香激情 | 怡红院久久 | 久久久久成人精品亚洲国产 | 人人爽人人av | 久久视频免费在线 | 亚洲乱亚洲乱亚洲 | 欧美另类色图 | 在线天堂v | 国产精品久久久久久久久费观看 | 日韩精品极品视频 | 日韩精品一区电影 | 久久精品视频免费播放 | 人人精品 | 国产日韩精品一区二区在线观看播放 | adc在线观看| 久久久久久免费网 | 91精品国产福利 | 久久视频免费在线 | 91丨九色丨蝌蚪丨对白 | 人人干干人人 | 久久精品亚洲综合专区 | 日韩激情片在线观看 | 中文字幕视频播放 | 国产午夜精品一区二区三区嫩草 | 国产在线观看a | 在线观看国产一区 | 狠狠色狠狠色 | 国产91精品看黄网站在线观看动漫 | 欧美性高跟鞋xxxxhd | 在线一二区 | 日韩丝袜视频 | 精品国产乱码久久久久久三级人 | 最近免费在线观看 | 国产精品久久久av久久久 | 久草久草在线观看 | 成人av片免费观看app下载 | www免费看片com | 国产糖心vlog在线观看 | 精品国产一区二区三区久久久蜜月 | 免费一级特黄录像 | 久久久久久久久久久国产精品 | 久久久久成人精品免费播放动漫 | 91中文视频| 国产九色91 | 天天躁天天躁天天躁婷 | 亚洲精品视频在 | 免费成人av | 伊人久在线 | 午夜视频福利 | av超碰在线 | 91色网址| 免费看的视频 | 中文国产成人精品久久一 | 中文字幕在线播放av | 在线视频精品 | 日韩国产精品久久久久久亚洲 | 91成人精品一区在线播放 | 中文字幕成人在线观看 | 91香蕉视频在线 | 337p欧美 | 国产网站色 | 国产 日韩 中文字幕 | 开心激情婷婷 | 亚洲永久精品在线观看 | 99热精品久久 | 日韩精品一区二区三区第95 | 欧美精品乱码99久久影院 | 欧女人精69xxxxxx | 蜜臀久久99精品久久久久久网站 | 日p视频在线观看 | 日本激情视频中文字幕 | 香蕉视频亚洲 | 在线电影中文字幕 | 午夜精品婷婷 | 亚洲午夜av久久乱码 | 亚洲免费一级 | 黄色软件在线观看免费 | 三上悠亚在线免费 | 丁香婷婷在线 | 欧美成a人片在线观看久 | 99精品久久久 | 黄色三级免费 | 久草免费在线视频 | a级成人毛片 | 中文字幕乱码电影 | 欧美在线free | 国产伦理剧 | 日韩在线免费小视频 | 欧美日韩视频在线播放 | 亚洲欧洲成人 | 日本特黄一级片 | 久久国产免费 | av888.com| 久久久综合电影 | 久久国产精品免费视频 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 日韩精品在线免费播放 | 亚洲久草在线视频 | 婷婷激情久久 | 超碰免费在线公开 | 日韩欧美高清一区二区 | 亚州人成在线播放 | 国产黄影院色大全免费 | 99热在线国产 | 亚洲精选久久 | 成人av一二三区 | 亚洲精品国产精品国自产在线 | 丁香六月久久综合狠狠色 | 国产精品久免费的黄网站 | 国产精品91一区 | 国产精品久久久久aaaa九色 | 免费在线观看国产精品 | 天天操操操操操操 | 97国产在线观看 | 国产国产人免费人成免费视频 | 黄色一级在线视频 | 日韩在线免费播放 | 国产69熟| 永久免费的啪啪网站免费观看浪潮 | ,午夜性刺激免费看视频 | 日韩高清免费无专码区 | 国产午夜亚洲精品 | 中文永久免费观看 | 欧美激情视频一区 | 欧美成人亚洲 | 日韩精品一区二区三区水蜜桃 | 国产久草在线观看 | 成人av一区二区兰花在线播放 | 黄色aa久久 | 亚洲精品玖玖玖av在线看 | 人人干干人人 | 亚洲在线黄色 | 中文字幕日韩伦理 | 欧美日本在线视频 | 欧美伦理一区 | 在线观看岛国 | 久草在线国产 | 日韩视频在线观看视频 | 欧美激情综合网 | 亚洲精品视频www | 9在线观看免费高清完整版在线观看明 | 91大神电影 | 97超碰站| 4438全国亚洲精品观看视频 | 日本高清中文字幕有码在线 | 啪啪av在线| 日韩电影一区二区在线 | 国产精品免费久久久久影院仙踪林 | 1000部18岁以下禁看视频 | 婷婷av网 | 激情综合网婷婷 | 国产不卡在线观看 | 亚洲免费小视频 | 中文字幕之中文字幕 | 国产精品一区二区在线播放 | 成年美女黄网站色大片免费看 | 亚洲在线视频免费 | 综合色中文 | 亚洲理论视频 | 高清不卡一区二区三区 | 国内精品久久久久久久久久久 | 婷婷久久综合九色综合 | 99久久精品国产系列 | 成人福利在线播放 | 日韩特级黄色片 | 一区二区伦理电影 | 成人免费视频网 | 免费看高清毛片 | 国产精品久久久久久久99 | 精品一二三四在线 | 亚洲精品国产精品国自产 | 婷婷草 | 伊人久久婷婷 | 日日久视频 | 日韩视频免费 | 久草在线视频免赞 | 91精品国产99久久久久久红楼 | 亚洲午夜精品久久久久久久久久久久 | 午夜精品一区二区三区在线观看 | 在线日韩三级 | www久久久久 | 十八岁以下禁止观看的1000个网站 | 久久久久久高潮国产精品视 | 欧美日韩一区二区三区免费视频 | 久久黄色精品视频 | 免费97视频| 免费看的毛片 | 日韩一二区在线 | 在线视频日韩一区 | 最近免费中文视频 | 九九视频免费 | a√国产免费a | 伊人永久 | 国产一区视频在线播放 | 黄色日视频 | 国产成人在线综合 | 一级免费黄视频 | 婷婷新五月 | 91视频久久 | av片无限看 | 久久精品在线视频 | 伊人资源站 | 玖玖在线播放 | 国产免费黄色 | 97精产国品一二三产区在线 | 久久99亚洲精品久久久久 | 天堂va在线高清一区 | 国产高清成人 | 欧美一级电影片 | 色多视频在线观看 | 国产精品免费在线播放 | 亚洲精品国产成人av在线 | 天天干天天操天天做 | 日韩精品电影在线播放 | 天天干夜夜爱 | 久久色中文字幕 | 欧美日韩精品在线视频 | av专区在线| 日韩一区二区三区高清免费看看 | 国产精品久久久久久久免费 | 亚洲成人蜜桃 | 97超碰在线播放 | 免费的黄色的网站 | 右手影院亚洲欧美 | 亚州国产精品 | 成人在线超碰 | 国产一区黄色 | 中文字幕视频一区二区 | 日p视频 | 五月婷婷操| 国产一区二区在线影院 | 精品人人人 | 激情丁香综合 | 婷婷丁香激情五月 | 国产在线播放一区二区三区 | 日本九九视频 | 伊人日日干 | 色欧美日韩 | 色综合久久五月天 | 日韩最新在线视频 | 亚洲精品一区二区三区高潮 | 日韩激情片在线观看 | 人人看看人人 | 亚洲成人av片在线观看 | 国产精品va在线观看入 | 91麻豆福利| 久久综合九色综合欧美就去吻 | 西西444www大胆高清视频 | 欧美做受高潮电影o | 狠狠的操狠狠的干 | 国产小视频在线观看 | 国产大尺度视频 | 免费91在线观看 | 欧美日韩在线免费视频 | 国产伦精品一区二区三区无广告 | 免费黄色特级片 | 久久久久国产精品视频 | 超碰国产在线播放 | 91丨九色丨国产女 | 午夜精品婷婷 | 毛片a级片| 日韩在线播放av | 欧美亚洲免费在线一区 | 亚洲黄色免费在线 | 亚洲精品大片www | 欧美精品久久久久久久久久丰满 | 亚洲精品国产精品乱码在线观看 | 久久久久久激情 | 国产精品久久一区二区无卡 | 手机在线黄色网址 | 国产精品99久久久久久武松影视 | 欧美污污视频 | 日韩色区 | 91mv.cool在线观看 | 嫩草av影院| 日韩免费看视频 | 国产精品一区二区三区四 | 日韩xxxxxxxxx| 国产三级国产精品国产专区50 | 97操操 | 日韩av免费在线电影 | 黄色精品久久 | 天天综合日日夜夜 | 国产精品 国产精品 | 麻豆91网站 | 狠狠操狠狠插 | 免费男女羞羞的视频网站中文字幕 | 看片黄网站 | 午夜久久网站 | 久久久影院官网 | 黄色三级免费观看 | 激情综合一区 | 一二三区视频在线 | 精品国产成人av在线免 | 国产 成人 久久 | 成人免费精品 | 亚洲高清91 | 热久久视久久精品18亚洲精品 | av在线观 | 国产精品久久人 | 91桃色在线免费观看 | 国产亚洲在线视频 | 一区二区三区日韩精品 | 亚洲男人天堂2018 | 91自拍91| 成人蜜桃视频 | 三级av免费| 日韩视频免费观看高清 | 国产一区二区不卡在线 | 久久久久99精品成人片三人毛片 | 国产黄色观看 | 久久成年视频 | 全久久久久久久久久久电影 | 午夜电影 电影 | 亚洲精品国产日韩 | 黄网站app在线观看免费视频 | 免费看日韩片 | 久草在线一免费新视频 | 99久久婷婷国产精品综合 | 久久久国产精品麻豆 | 黄污网站在线观看 | 在线看污网站 | 97看片| 少妇搡bbbb搡bbb搡aa | 久久一及片 | 精品在线视频一区二区三区 | 国产精品久久99精品毛片三a | 国产一二三精品 | 国产精品一区二区精品视频免费看 | 狠狠色丁婷婷日日 | 最近中文字幕高清字幕在线视频 | 国产在线播放一区二区 | 麻豆mv在线观看 | 国产资源网 | 久久精品老司机 | 亚洲国产精品小视频 | 国产一区二区在线看 | 亚洲国产黄色片 | 国产成人一区二区三区在线观看 | 最近中文字幕在线中文高清版 | 麻豆94tv免费版 | 999国产| 日韩高清国产精品 | 精品久久精品 | 国产视频在线看 | 国产视频久久久 | 欧美在线一级片 | 久草在线最新 | 免费在线观看av的网站 | 97在线精品视频 | 亚洲精品视频免费 | 欧美黑人性爽 | 日日夜夜精品视频天天综合网 | 国产精品一级视频 | 亚洲涩涩网 | 国产精品免费一区二区 | 91九色视频在线 | 久久草网| 亚洲综合少妇 | 丝袜制服综合网 | 国产精品一区二区在线观看免费 | 人人插人人搞 | 九九视频在线观看视频6 | 超碰国产在线播放 | 欧美ⅹxxxxxx | www.xxxx欧美| 狠狠网| 国产色妞影院wwwxxx | 最近2019中文免费高清视频观看www99 | 成年人毛片在线观看 | 国产精品一区二区麻豆 | 精品免费观看视频 | 激情婷婷色 | 亚洲情婷婷 | 日韩av专区| 天天草天天色 | 国产一级不卡视频 | 天天摸天天操天天爽 | 久久精品99国产精品日本 | 欧美日韩国产亚洲乱码字幕 | 久久夜靖品 | 国产一区二区三区 在线 | 天天摸天天操天天舔 | 国产九九九视频 | 美女福利视频一区二区 | 日韩精品网址 | 天天操天天玩 | 在线精品视频在线观看高清 | 欧美日韩在线视频观看 | 婷婷精品进入 | 一区二区三区四区影院 | 美女视频是黄的免费观看 | 91在线看片 | 丰满少妇对白在线偷拍 | 午夜999| 日韩三级视频在线观看 | 中文在线免费看视频 | 99久久99| 中文字幕 国产专区 | 国产精品日韩久久久久 | 日韩在线视频观看免费 | 国产精品久久久久久久久久久久久久 | 九九视频免费观看视频精品 | 国产亚洲成av人片在线观看桃 | a级一a一级在线观看 | 久久tv视频 | 国产精品视频免费 | 丁香婷婷激情网 | 97国产大学生情侣酒店的特点 | 欧美日韩网站 | 国产伦精品一区二区三区免费 | 久久人人精品 | 久草在线视频网 | 一本一道久久a久久精品蜜桃 | 91精品夜夜| 亚洲视频456| 99精品国产一区二区三区不卡 | 午夜精品三区 | 99久久99久久 | 黄色软件大全网站 | 永久免费看av | av免费观看高清 | 超碰免费97 | 亚洲国产av精品毛片鲁大师 | 91亚色视频 | 亚洲精品午夜一区人人爽 | 成人毛片久久 | 人人射人人爽 | 久久国产免费看 | 婷婷丁香综合 | 在线观看亚洲专区 | 国产在线观看午夜 | 麻豆视频在线播放 | 日本不卡123 | 欧美日一级片 | 91免费高清视频 | 伊人激情网 | 亚洲精选视频在线 | 天天色天天爱天天射综合 | 中文字幕日韩高清 | 激情五月婷婷激情 | 国产成人精品一区一区一区 | 国产中文字幕亚洲 | 天天爽夜夜操 | 在线你懂的视频 | 精品国产成人在线影院 | 99国产精品久久久久老师 | 久久久精品网站 | 久99久精品视频免费观看 | 亚洲人久久久 | 久久久久久久99 | 国产成人精品999 | 亚洲精品高清视频 | 国产精品男女啪啪 | 国产一区二区久久 | 国产淫片| 国产亚洲精品美女久久 | 亚洲va综合va国产va中文 | 亚洲狠狠丁香婷婷综合久久久 | 国产精品video爽爽爽爽 | av免费高清观看 | 精品国产精品一区二区夜夜嗨 | 97精品在线视频 | 成人免费看片网址 | 国产精品嫩草55av | 99久久久久久久 | 中文字幕成人 | 国产激情久久久 | 999视频网站| 久久国产热视频 | 亚洲欧美在线观看视频 | 手机成人免费视频 | 成人三级网站在线观看 | 五月亚洲综合 | 在线视频1卡二卡三卡 | 激情五月婷婷综合 | 91精彩视频 | 免费看精品久久片 | 国产黄在线免费观看 | 黄色av网站在线观看免费 | 国产在线综合视频 | 18做爰免费视频网站 | 在线 国产一区 | 欧亚久久| www.福利| 色国产精品一区在线观看 | 在线观看的av网站 | 福利视频午夜 | 五月天六月婷婷 | 黄色www| 99精品视频在线观看视频 | 亚洲国产精品va在线看黑人 | 久久成年人网站 | 激情丁香在线 | 亚洲专区在线视频 | se婷婷| h视频在线看 | 免费看的黄色的网站 | 国产精品九九热 | 日韩高清av | 99久久精品久久久久久清纯 | 国产理论片在线观看 | 在线亚洲成人 | 91九色精品 | 国产中文字幕视频在线观看 | 国色天香第二季 | 国产一区二区三区免费视频 | 国产无套精品久久久久久 | 成人毛片在线观看视频 | 精品视频免费观看 | 你操综合 | 一区二区三区精品在线视频 | 国产成人三级在线观看 | 欧美日韩视频在线播放 | 手机看片午夜 | 激情综合网天天干 | 一区二区三区四区五区在线 | 国产黄色av网站 | 国内精品久久久久影院一蜜桃 | 久久人视频 | 一区二区久久久久 | 国产视频1区2区3区 久久夜视频 | 国产亚洲小视频 | 久久精品一二三区白丝高潮 | 毛片二区 | 欧美激情精品久久久 | 日韩av资源站 | 81国产精品久久久久久久久久 | 精品久久美女 | 一级黄色毛片 | 奇米7777狠狠狠琪琪视频 | 人人干在线 | 久久天 | 色综合久久中文综合久久牛 | 日精品在线观看 | 麻豆成人网 | 国产特黄色片 | 99在线精品视频观看 | 色综合在| 久久色在线播放 | 欧美性久久久久久 | 日韩欧美国产精品 | 亚洲精品在线视频观看 | 久久精品理论 | 国产福利在线 | 又色又爽又黄 | 欧美视频在线观看免费网址 | 国产不卡高清 | 国产精品黄 | 久久婷婷丁香 | 最新一区二区三区 | 色噜噜噜 | 国产精品免费一区二区 | 国产视频在线观看一区 | 黄色一区三区 | 国产精品免费在线播放 | 91免费在线播放 | 日韩免费电影网站 | 91香蕉视频好色先生 | 免费久久久 | 成人在线观看日韩 | 久久欧美在线电影 | 99精品久久久久久久久久综合 | 91精品国产成人 | 97超视频在线观看 | 最近高清中文字幕 | 中文字幕高清免费日韩视频在线 | 99精品美女| 国产色婷婷 | 成人毛片100免费观看 | 久久天堂影院 | 在线 国产一区 | 一区 二区电影免费在线观看 | 国色天香第二季 | 人人玩人人添人人澡97 | 国产三级精品三级在线观看 | 欧美性大战 | 探花国产在线 | 91视频在线播放视频 | 深爱开心激情网 | 久久免费国产视频 | 91在线中文 | 在线a亚洲视频播放在线观看 | 丰满少妇在线观看 | 欧美日韩亚洲一 | 三级在线视频观看 | 91人人爱 | 亚洲国产精久久久久久久 | 人人爽人人| 狠狠色狠狠色合久久伊人 | 91大神精品视频在线观看 | 亚洲三级在线免费观看 | 亚洲精品在线观看网站 | 国产精品美女久久久久久 | 中文字幕在线人 | 亚洲成aⅴ人在线观看 | 91亚洲精品在线观看 | 欧美日韩性视频在线 | 欧美人体xx| 91香蕉视频720p | 欧美精品中文 | 国产手机在线观看视频 | 午夜手机电影 | 国产成在线观看免费视频 | 欧美不卡视频在线 | 中文字幕免费看 | 天天射天天干 | 国产成人精品午夜在线播放 | 国产精品久久久久久久久久妇女 | 丝袜制服综合网 | 国产精品国产亚洲精品看不卡15 | 99热在线国产精品 | 成人av电影在线播放 | 午夜在线免费视频 | 日韩av在线资源 | 国产剧情一区在线 | 久久夜夜爽 | av在线电影免费观看 | 国产视频不卡一区 | 一区 在线 影院 | 亚洲黄色成人av | 日韩av手机在线看 | 在线观看成人毛片 | 91麻豆产精品久久久久久 | 欧美日韩18 | 日韩在线视频看看 | 亚洲免费在线播放视频 | 国产视频一区二区在线观看 | 亚洲综合视频在线 | 狠狠狠色丁香婷婷综合激情 | 日本精品二区 | 日韩电影一区二区在线观看 | 日韩av片免费在线观看 | 国产一区二区免费看 | 久久久久网址 | 婷婷激情五月综合 | 国产中文字幕网 | 一区二区三区四区精品 | 久精品视频在线 | 欧美特一级片 | 国产免费一区二区三区网站免费 | 免费在线看v | 久久a v视频 | 日韩成人邪恶影片 | 毛片网免费 | 亚洲一区二区视频在线播放 | 韩国在线视频一区 | 国产精品一区二区在线播放 | 久久久精品久久日韩一区综合 | 亚洲精品视频在线观看网站 | 精品一区二区三区香蕉蜜桃 | 中文免费在线观看 | 激情五月婷婷综合网 | 免费能看的黄色片 | 天天爽天天做 | 亚洲视频久久久久 | 视频一区视频二区在线观看 | 日韩高清在线一区二区三区 | 五月丁婷婷| 国产精品99视频 | 中文国产成人精品久久一 | 日韩av在线免费看 | 91超级碰碰 | 久久久精品国产一区二区三区 | 808电影 | 久久精品国产免费看久久精品 | 97在线资源 | 国产小视频91 | 免费三及片 | 欧美日韩精品二区第二页 | 久久综合射| 中文字幕免 | 国产第页 | 免费网站在线观看人 | 亚洲在线精品视频 | 天天av在线播放 | 天天插天天色 | 欧美性另类 | 黄色www在线观看 | 丁香六月婷婷综合 | 久久久久久久久久久免费av | 亚洲九九爱 | 人人要人人澡人人爽人人dvd | 成人av电影在线播放 | 国产我不卡 | 天堂av在线免费观看 | 国产成人精品一区二区在线 | 天天综合网天天综合色 | 成年一级片 | 在线免费黄色片 | 国产精品美女久久久久久久久 | 久久9999久久免费精品国产 | 天天射天天操天天干 | 中文在线字幕免费观看 | 五月婷婷在线视频观看 | 成人h视频 | 久久久久久久久久影视 | 精品美女在线观看 | 久久久免费毛片 | 国产精品毛片一区二区三区 | 99久热在线精品视频 | 日韩一区二区三免费高清在线观看 | 成人天堂网 | 97在线精品国自产拍中文 | 欧美一级特黄aaaaaa大片在线观看 | 在线黄色av | 国产精品久久人 | 综合久色 | 中文字幕久久精品亚洲乱码 | 亚洲精品国偷拍自产在线观看蜜桃 | 国产黄色av | 四虎www com| 国产真实精品久久二三区 | 精品国产_亚洲人成在线 | 一区二区三区四区在线免费观看 | 欧美久久久久久 | 婷婷色伊人| 欧美成年性| 在线观看一区二区精品 | 91在线播放国产 | 亚洲国产精品视频 | 公与妇乱理三级xxx 在线观看视频在线观看 | 国内视频一区二区 | 日产中文字幕 | 国产精品九九热 | 国产一级片免费播放 | 99性视频| 久久久久美女 | 奇米四色影狠狠爱7777 | 国产免费久久av | 色综合天天射 | 国产精品va在线观看入 | 国产 日韩 中文字幕 | 欧美精品网站 | 丝袜网站在线观看 | 日韩在线看片 | 免费一级特黄毛大片 | 中文字幕av最新更新 | 免费在线观看成人 | 国产一级黄色免费看 | 免费看的黄色片 | 国产成人精品一区二区三区网站观看 | 一级成人免费视频 | 精品一区二区在线免费观看 | 欧美日韩啪啪 | 麻豆激情电影 | 97色狠狠 | 国产裸体视频网站 | 五月婷婷六月综合 | 国产精品一区二区精品视频免费看 | 国产一级免费视频 | 日日夜夜综合网 | 国内偷拍精品视频 | 国产在线日韩 | 日韩在线首页 | 欧美乱淫视频 | 少妇av片 | 成人在线观看av | 美女视频黄免费网站 | 综合久久久久久久 | 精品麻豆| 国产久草在线 | 国产精品久久久久久久久久了 | 精品国模一区二区三区 | 激情久久综合网 | 国产美女在线精品免费观看 | 久久精品久久精品 | 日日夜夜网 | 国产精品久久久久久999 | 免费a网| 国产精品视频地址 | 久久综合之合合综合久久 | 免费黄色看片 | 亚洲精品免费看 | 天天射综合| 国产高清一级 | 中文字幕av免费 | 天天爱天天 | 亚洲精品在线观看的 | 久久久精选| 国产明星视频三级a三级点| 美国av大片 | 99热这里是精品 | 四虎国产精品成人免费影视 | 久久99精品久久久久久 | 国产亚洲精品精品精品 | 色综合天天爱 | 日本精品视频在线观看 | 欧美激情综合五月色丁香小说 | 成人a v视频| 午夜12点 | 国产精品毛片一区二区在线看 | 久久精品二区 | 亚洲精品在线观看视频 | 狠狠躁夜夜躁人人爽超碰91 | 91精品国产91久久久久 | 日韩在线视| 日韩字幕在线观看 | 爱爱av网站 | 日本公乱妇视频 | 国产精品免费久久久久久久久久中文 | 啪啪免费试看 | 中文字幕日韩精品有码视频 | 国产亚洲在线 | 欧美另类69| 欧美国产大片 | 一级欧美日韩 | 在线观看爱爱视频 | 国产视频中文字幕在线观看 | 九九热在线视频免费观看 | 日韩在线三区 | 黄色精品国产 | 天天色天天干天天色 | 激情五月***国产精品 | 九九日九九操 |