首答:
之前用了一下Selenium,发现打开网页有点慢,然后发现了Pyppeteer。
首先对比了一下(用的Windows):
Selenium(headless + !JavaScript):
from selenium
import webdriverimport
timestart = time.time()
url = "https://www.baidu.com"
option = webdriver.FirefoxOptions()
option.add_argument('--headless')
option.set_preference('permissions.default.image',2)
option.set_preference('permissions.default.javascript',2)
browser = webdriver.Firefox(options=option)
browser.get(url)
source = browser.page_source
end=time.time()
print (end-start)
结果如下:
发现差不多都得10秒,有点慢
然后用了Pyppeteer:
Pyppeteer (headless):
import asynciofrom pyppeteer
import launch
import timeasync
def main():
start=time.time()
browser = await launch({'headless': True,'dumpio':True,'autoClose':False,'args': ['--no-sandbox', '--window-size=1366,850']})
page = await browser.newPage()
await page.setViewport({'width':1366,'height':768})
await page.goto('https://www.baidu.com')
await browser.close()
end=time.time()
print(end-start)
asyncio.get_event_loop().run_until_complete(main())
况且,chrome driver 和 geckodriver我在树莓派上倒腾了两天也没弄明白咋部署(各种报错)如果谁要是弄明白了麻烦告诉我一下吧,谢谢。
Pyppeteer超级好安装:
按照这个官网链接:https://miyakogi.github.io/pyppeteer/#
pip3 install pyppeteer
然后配置环境变量
(临时添加):
export PATH=$PATH:'/home/ubuntu/.local/bin'
得把我的ubuntu换成你的用户名!!!
(话说我的kali 为啥要叫Ubuntu?)
(永久添加):
nano /etc/profile
或者是/home目录下的那几个bashrc文件,加上就行
哦对,别忘了权限
chmod -R 770/111/.........
给个x就行
官网说:
Note: When you run pyppeteer first time, it downloads a recent version of Chromium (~100MB).
If you don’t prefer this behavior, run pyppeteer-install
提示:当你第一次运行pyppeteer时,它会下载一个最近的Chromium版本,如果你不想要这样的话(需要提前安装Chromium),就运行
pyppeteer-install
我试了一下,它自动安装的版本是x86-64的,在树莓派上运行会报错(arm64)
版本:
报错:
OSError: [Errno 8] Exec format error: '/home/ubuntu/.local/share/pyppeteer/local-chromium/588429/chrome-linux/chrome'
好在kali下有自带的Chromium
指定用这个Chromium就行
还是用官网的示例
import asyncio
from pyppeteer import launch
import time
async def main():
start=time.time()
browser = await launch(executablePath='/usr/bin/chromium')
page = await browser.newPage()
await page.goto('https://www.baidu.com')
await page.screenshot({'path': 'example.png'})
await browser.close()
end=time.time()
print (end-start)
asyncio.get_event_loop().run_until_complete(main())
唯一不一样的地方是,只要在第六行加上执行路径就行了,kali下一般为 /usr/bin/chromium
然后直接 python3 … .py 就行了
回到最上面测试速度的那个地方
browser = await launch({'headless': True,'dumpio':True,'autoClose':False,'args': ['--no-sandbox', '--window-size=1366,850']})
page = await browser.newPage()
await page.setViewport({'width':1366,'height':768})
加个page.setViewport 就行了
这就正了
差不多了,首答,很开心!!!!