【初始化】
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 } }) }') # 本页刷新后值不变
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)
await page.goto(h5_detail_url,waitUntil=["networkidle0", "load", "domcontentloaded"],options={'timeout': 30000})
# # 是否启用JS,enabled设为False,则无渲染效果
await self.page.setJavaScriptEnabled(enabled=False)
#waitForSelector 默认为30000(30秒),为0禁用超时
await self.page.waitForSelector('.shop_list .clearfix span.tit_shop',{'timeout': 9000}) #等待元素加载
await asyncio.sleep(2)
使用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)')