赞
踩
Puppeteer 是 Google 基于 Node.js 开发的工具,调用 Chrome 的 API,通过 JavaScript 代码来操纵 Chrome 完成一些操作,用于网络爬虫、Web 程序自动测试等,其 API 极其完善,功能非常强大。
Pyppeteer 是一款非常高效的 web 自动化测试工具,是 Puppeteer 的 Python 版本。
pyppeteer 使用了 Python 异步协程库 asyncio,可整合 Scrapy 进行分布式爬虫。
python3 -m pip install pyppeteer
dimensions = await page.evaluate('''() => {
return {
width: document.documentElement.clientWidth,
height: document.documentElement.clientHeight,
deviceScaleFactor: window.devicePixelRatio,
}
}''')
const browser = await puppeteer.launch({
userDataDir: './data', })
await page.evaluateOnNewDocument('() =>{ Object.defineProperties(navigator,'
'{ webdriver:{ get: () => false } }) }')
await page.evaluate('''() =>{ Object.defineProperties(navigator,{ webdriver:{ get: () => false } }) }''')
import pyppeteer # 在导入 launch 之前 把 --enable-automation 禁用 防止监测webdriver pyppeteer.launcher.DEFAULT_ARGS.remove("--enable-automation") async def main(key_word, start_page, is_last_key_word): # launch 方法会新建一个 Browser 对象,其执行后最终会得到一个 Browser 对象,然后赋值给 browser。这一步就相当于启动了浏览器。 browser = await pyppeteer.launch(headless=False, # 网站可能设置了无头/自动化测试工具嗅探 # devtools = True, # slowMo=100, # userDataDir='./pyppeteer_data', defaultViewport={"width": 1280, "height": 720}, fullPage=True, dumpio=True, # chromium浏览器多开页面卡死问题 args=['--disable-infobars', '--window-size=1920,1080', '--disable-features=TranslateUI', # '--proxy-server="socks5://127.0.0.1:1080"', # '--proxy-bypass-list=*', "--disable-infobars", "--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36", ]) # 1.新建页面跳转到主页 # context = await browser.createIncognitoBrowserContext()无痕模式 index_page = await browser.newPage() await index_page.goto(index_url) await index_page.screenshot( {'path': './PYPPETEER_crawl_screenshot.png', 'type': 'png', 'fullPage': True}) print(index_page.target.url) page_text = await index_page.content() # print(page_text) # 2.点击关闭主页提示 index_close_button_selector = '' await index_page.waitForSelector(index_close_button_selector) await index_page.click(index_close_button_selector, options={'delay': delay_time}) input_selector = '' # 3.输入关键字 并搜索 await index_page.type(input_selector, key_word) search_bnt_selector = '' await index_page.click(search_bnt_selector, options={'delay': delay_time}) page_text = await index_page.content() await index_page.close()#关闭当前tab await browser.close()# 关闭浏览器 asyncio.get_event_loop().run_until_complete( main(key_word, start_page,is_last_key_word))
pip3 install pyppeteer
在线
pyppeteer-install
离线
https://download-chromium.appspot.com/?platform=Linux_x64&type=snapshots
https://www.jianshu.com/p/ef86d9963009 https://www.jianshu.com/p/f1a8fb7037d7
// 在登录页跳转之后添加
await page.waitForNavigation(); // 等待页面跳转
由于点击事件执行很快已跳转到新的页面,导致程序运行到导航等待的时候,一直处于新的页面等待触发,直到30秒超时报错,所以,正确的做法应该是把点击和导航等待视为一个整体进行操作
参考:https://blog.csdn.net/qq_29570381/article/details/89735639
##写法一:
await asyncio.gather(
page.waitForNavigation(),
page.click(’…’),
)
## 写法二:
await asyncio.wait([
page.waitForNavigation(),
page.click(’…’),
])
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。