前言:
在使用puppeteer自动爬取知乎上数据的时候,在登录的时候会报错: 10001:请求参数异常,请升级客户端后重试... 相信很多人在爬取知乎数据的时候也会碰到类似的问题,怎么解决呢?
解决方案:
先说说为什么会出现这种情况,知乎其实在对是不是用户活人的判断,是有一定的依据的,记得之前是通过window.navigator.webdriver 这个来判断是不是通过puppeteer来判断的,现在这个版本又换了.. 通过user-agent来判断了
上面的截图中我的user-agent是:
user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) awesomeScripts/1.0.0 Chrome/104.0.5112.102 Electron/20.1.1 Safari/537.36
具体是通过哪个判断我也不晓得,但是全部替换肯定没毛病.于是把这段user-agent换成了我正常电脑登陆的user-agent,
await page.setUserAgent('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36')
换完之后便可正常登录了.
另外如果想改变window.navigator.webdriver 为undefined只需要在跳转到url之前执行以下代码即可:
await page.evaluateOnNewDocument(() => {
Object.defineProperty(navigator, 'webdriver', {
get: () => undefined
})
});
总结:
其实服务端判断当前用户是否是正常的用户,就那么几个方式,最主要的是通过user-agent来判断,未来如果碰到相似的问题,都可以往这方面去靠.