我读到,如果使用隐式等待、无头、ID 和 CSS 选择器等,Selenium Chrome 可以运行得更快。在实施这些更改之前,我想知道 cookie 或缓存是否会减慢我的速度。
Selenium 是否像普通浏览器一样存储 cookie 和缓存,或者每次导航到网站上的新页面时都会重新加载所有资源?
如果是,那么这将减慢抓取具有数百万个相同配置文件页面的网站的过程,其中每个配置文件的脚本和图像都是相似的。
是的,有办法避免这个问题吗?有兴趣在会话期间使用 cookie 和缓存,然后在浏览器关闭后销毁。
编辑,更多详细信息:
sel_options = {'proxy': {'https': pString}} prefs = {'download.default_directory' : dFolder} options.add_experimental_option('prefs', prefs) blocker = os.path.join( os.getcwd(), "extension_iijehicfndmapfeoplkdpinnaicikehn") options.add_argument(f"--load-extension={blocker}") wS = "--window-size="+s1+","+s2 options.add_argument(wS) if headless == "yes": options.add_argument("--headless"); driver = uc.Chrome(seleniumwire_options=sel_options, options=options, use_subprocess=True, version_main=109) stealth(driver, languages=["en-US", "en"], vendor="Google Inc.", platform="Win32", webgl_vendor="Intel Inc.", renderer="Intel Iris OpenGL Engine", fix_hairline=True) driver.execute_cdp_cmd('Network.setUserAgentOverride', {"userAgent": agent}) navigate("https://linkedin.com")
我不认为我的代理或扩展是罪魁祸首,因为我有一个类似的自动化应用程序运行,没有速度问题。
Selenium WebDriver 在默认情况下会模拟浏览器行为,包括存储和处理 cookie 和缓存。这意味着在每次导航到新页面时,Selenium 会加载页面的所有资源,并处理和存储相关的 cookie。
这在某些情况下可能会导致性能下降,特别是在需要抓取大量相似页面的情况下。每次都重新加载资源和处理 cookie 可能会消耗时间和带宽。
然而,您可以通过配置 Selenium WebDriver 来优化这一点,以便在会话期间使用 cookie 和缓存,而不是在每次导航时重新加载。下面是一些方法:
options.add_argument("--disk-cache-dir=/path/to/cache")
这将指定一个文件夹,用于存储浏览器缓存。通过这种方式,浏览器将会在会话期间使用缓存,而不是每次重新加载资源。
``` # 添加 cookie driver.add_cookie({“name”: “cookie_name”, “value”: “cookie_value”})
# 获取 cookie cookies = driver.get_cookies()
# 删除所有 cookie driver.delete_all_cookies() ```
通过手动管理 cookie,您可以控制在会话期间使用哪些 cookie,以及何时添加、更新或删除它们。
请注意,代理和扩展也可能会对性能产生影响,尤其是如果它们会干扰或拦截网络请求。确保您的代理和扩展的配置是正确的,并且它们不会导致性能下降。
在您的代码示例中,您正在使用 Selenium Wire 和 Chrome 选项进行一些自定义配置。确保您对这些配置的了解,并确认它们不会对性能产生负面影响。
最后,尝试对您的代码进行优化和性能测试。可以尝试使用不同的配置和选项,以及使用浏览器开发者工具进行分析,以确定可能导致性能下降的因素,并采取相应的措施来优化您的自动化应用程序。