1、常用小功能
【初始化】
async def init_pyppeteer(self):
self.browser = await pyppeteer.launch({'headless': False,
# 'userDataDir': './userdata',# 用戶臨時目錄,保存cookie可以開啓
'args': [
# '--window-size={1300},{800}',
'--start-maximized', # 最大化窗口
'--proxy-server=http://118.24.51.247:1443',#瀏覽器代理 配合某些中間人代理使用
# '--load-extension={}'.format(chrome_extension), # 加載插件
# '--disable-extensions-except={}'.format(chrome_extension),
# '--disable-extensions',
'--hide-scrollbars',
'--disable-bundled-ppapi-flash',
'--mute-audio',
'--no-sandbox', # 取消沙盒模式 沙盒模式下權限太小
'--no-sandbox', # 不顯示信息欄 比如 chrome正在受到自動測試軟件的控制
'--disable-setuid-sandbox',
'--disable-gpu',
'--disable-infobars'
# log等級設置 在某些不是那麼完整的系統裏 如果使用默認的日誌等級 可能會出現一大堆的warning信息
],
'dumpio': True, # 減少內存消耗
# "slowMo": 25 # 讓執行慢下來
})
self.page = await self.browser.newPage()
width, height = self.screen_size()
await self.page.setViewport({
"width": width,
"height": height
})
# 設置瀏覽器頭部
await self.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 self.page.evaluateOnNewDocument('() =>{ Object.defineProperties(navigator,'
'{ webdriver:{ get: () => false } }) }') # 本頁刷新後值不變
1.1、繞過對方網站監測
import pyppeteer
async def page_evaluate(self, page):
'''window.navigator.webdriver=false'''
await page.evaluate('''() =>{ Object.defineProperties(navigator,{ webdriver:{ get: () => undefined } }) }''') # 以下爲插入中間js,將淘寶會爲了檢測瀏覽器而調用的js修改其結果。
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(self):
browser = await pyppeteer.launch()
page = await browser.newPage()
await self.page_evaluate(page)
1.2、網絡通信異常處理
await page.goto(h5_detail_url,waitUntil=["networkidle0", "load", "domcontentloaded"],options={'timeout': 30000})
1.3、禁止渲染
# # 是否啓用JS,enabled設爲False,則無渲染效果
await self.page.setJavaScriptEnabled(enabled=False)
.1.4、等待元素加載
#waitForSelector 默認爲30000(30秒),爲0禁用超時
await self.page.waitForSelector('.shop_list .clearfix span.tit_shop',{'timeout': 9000}) #等待元素加載
await asyncio.sleep(2)
1.5、滾動瀏覽器
使用js滾動到某個元素
# 使用js滾動到某個元素
await self.page.evaluate('document.querySelector(".page_al").scrollIntoView();')
滾動到瀏覽器底部
#滾動到瀏覽器底部
await self.page.evaluate('window.scrollBy(0, document.body.scrollHeight)')
滾動多少像素
#瀏覽器向上滾動400個像素
await self.page.evaluate('window.scrollBy(0,-400)')