使用pyppeteer + 多线程 下载操作文件冲突解决方法
1、开始 使用信号量控制线程并发访问,但是线程跑起来等待下载操作文件时间较长,效率慢,有些靠后的在等待过程可能ip就过时了,轮到它,再下载文件就报错了。这个用来控制获取代理ip很好
semaphore = threading.Semaphore()
def main():
semaphore.acquire()
proxy = get_ip()
semaphore.release()
2、后面直接使用浏览器根据线程id,新建文件夹,设置浏览器默认下载目录,完美解决
page2 = await browser.newPage()
await sleep(1)
path_dir = os.path.join('E:\\path', threading.current_thread().name)
os.makedirs(path_dir, exist_ok=True)
cdp = await page2.target.createCDPSession()
await cdp.send('Page.setDownloadBehavior', {
'behavior': 'allow',
'downloadPath': path_dir
})
await page2.goto(url, timeout=1000 * 60)
await sleep(3)