赞
踩
曾找过各种方式去加速selenium,然而效果都不尽人意,最后自己花了一些时间做了一个高效selenium模块,加上高效代理,一天请求百万次可能有些吃力(cpu、网速等各方面),但是几十万的请求次数在线上测试环境没什么问题。
使用Selenium(模拟浏览器)加上代理,一次启动可同时打开10个(可调整)页面发起请求,并使用字典绑定每个url对应的页面权柄。在等待一定加载时间后(如20秒,可调整),开始从第一个页面开始,利用Selenium显示等待WebDriverWait(在一定时间内如果检测不到指定内容则报错)进行特定标签的检测(如商品名title标签),检测到则调用成功函数,失败则等待极短时间后再次检测,再次失败则调用失败 函数。 防止selenium卡在加载界面,加入selenium的最长加载时间,并且加入不同机制提升效率,如第一个页面最长等待时间为20秒,当遇到失败界面时调整为2秒,再次遇到失败界面调整为1秒,递减直至0.5秒。
截图:
代码部分(简单的可跑的demo):
- from selenium.webdriver import Chrome
- from selenium.webdriver import ChromeOptions
- from loguru import logger
- from selenium.webdriver.common.by import By
- from selenium.webdriver.support.ui import WebDriverWait
- from selenium.webdriver.support import expected_conditions as EC
- from multiprocessing import Process, Pool
- import os
- import time
- import random, traceback
-
-
- def get_proxy():
- return "1.1.1.1"
-
-
- class Selenium_Obj(object):
- def __init__(self, headless=True, proxy=True):
- self.proxy = proxy
- self.chrome_options = ChromeOptions()
- # 不加载图片 不加载JS
- No_Image_loading = {'profile.default_content_setting_values': {'images': 2, 'javascript': 2}}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。