在使用 SeleniumBase 结合 Undetected ChromeDriver (uc=True) 进行多线程处理时,可能会遇到页面加载失败的问题。这通常是由于多个线程同时使用代理,导致代理配置冲突所致。本文将介绍如何通过设置 multi_proxy=True 参数来解决代理冲突,并强调使用 pytest-xdist 进行多线程测试是 SeleniumBase 官方支持的方式。同时,也会讨论在不使用 pytest-xdist 的情况下进行多线程处理的注意事项。
当使用 SeleniumBase 设置代理时,它会创建一个包含代理凭据的 zip 文件,并将其作为扩展加载到 Chrome 中。默认情况下,SeleniumBase 假设只使用一个代理,因此会覆盖现有的 zip 文件。当需要同时使用多个代理时,需要设置 multi_proxy=True 参数。这个参数会为每个使用代理的测试创建一个具有唯一名称的 zip 文件,从而避免代理冲突。
以下是一个示例代码,展示了如何使用 multi_proxy=True 参数:
from parameterized import parameterized from seleniumbase import BaseCase BaseCase.main(__name__, __file__, "-n3") class ProxyTests(BaseCase): @parameterized.expand( [ ["user1:pass1@host1:port1"], ["user2:pass2@host2:port2"], ["user3:pass3@host3:port3"], ] ) def test_multiple_proxies(self, proxy_string): self.get_new_driver( undetectable=True, proxy=proxy_string, multi_proxy=True ) self.driver.get("https://browserleaks.com/webrtc") self.sleep(30)
在这个例子中,get_new_driver 方法被调用,并设置了 undetectable=True,proxy=proxy_string 和 multi_proxy=True。multi_proxy=True 确保了每个测试都使用一个唯一的代理配置,从而避免了冲突。
注意事项:
SeleniumBase 官方支持使用 pytest-xdist 进行多线程测试。pytest-xdist 是一个 pytest 插件,允许将测试用例分发到多个 CPU 或机器上并行执行。SeleniumBase 的内置线程锁专门为通过 pytest 进行多线程处理而设计。
使用 pytest-xdist 的优势:
理论上,可以在不使用 pytest-xdist 的情况下进行多线程处理,但需要确保同一时间只启动一个 Chrome 浏览器。一旦浏览器启动,就可以同时运行多个实例。
注意事项:
在使用 SeleniumBase 进行多线程处理时,如果遇到页面加载问题,首先应该考虑是否是由于代理冲突引起的。通过设置 multi_proxy=True 参数可以解决这个问题。此外,建议使用 pytest-xdist 进行多线程测试,这是 SeleniumBase 官方支持的方式,可以确保线程安全和资源管理。如果必须在不使用 pytest-xdist 的情况下进行多线程处理,需要格外小心,并确保正确地管理线程锁和资源。
以上就是使用 SeleniumBase 进行多线程处理时遇到问题的解决方案的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号