pyppeteer應用2

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)')

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章