如何解决Selenium Chrome Webdriver无法在无配置文件模式下工作
所以,这是我遇到的代码:
def scrap():
options = webdriver.ChromeOptions();
options.add_argument('headless');
options.add_argument('--profile-directory=Profile 1')
options.add_argument("--user-data-dir=C:/Users/omarl/AppData/Local/Google/Chrome/User Data/")
options.add_argument("--remote-debugging-port=45447")
options.add_argument("--disable-gpu")
browser = webdriver.Chrome(executable_path=r"C:\Users\omarl\OneDrive\Escritorio\chromedriver.exe",options=options)
scrapURL = "https://es.wallapop.com/search?distance=30000&keywords=leggins&latitude=41.38804&longitude=2.17001&filters_source=quick_filters"
browser.get(scrapURL)
#...
错误:
WebDriverException: unknown error: unable to discover open pages
我在执行脚本时没有任何 chrome 实例,并且在没有headless
选项的情况下使用它时,它可以正常工作。知道为什么会这样吗?请注意,我正在使用类似问题中提供的--remote-debuggin-port
。
我正在使用 ChromeDriver 86.0.4240.22
解决方法
您是否尝试过使用arg --no-sandbox? Chrome Driver Error using Selenium: Unable to Discover Open Pages上的很多人都成功地接受了这种说法。
,要以Chrome Profile模式调用Headless,则只能使用--user-data-dir
参数,并且可以安全地删除--profile-directory
参数,如下所示:
-
代码块:
from selenium import webdriver options = webdriver.ChromeOptions() options.add_argument('--headless') options.add_argument('--window-size=1920,1080') # options.add_argument('--profile-directory=Profile 1') options.add_argument(r"--user-data-dir=C:\Users\Soma Bhattacharjee\AppData\Local\Google\Chrome\User Data\Default") options.add_argument("--remote-debugging-port=9222") driver = webdriver.Chrome(options=options,executable_path=r'C:\WebDrivers\chromedriver.exe') driver.get('https://www.google.com/') print("Chrome Headless launched")
-
控制台输出:
DevTools listening on ws://127.0.0.1:9222/devtools/browser/93c67c41-e125-4d12-abc0-fcf0f07a62f4 Chrome Headless launched
参考文献
您可以在以下位置找到几个相关的详细讨论:
- How to open a Chrome Profile through --user-data-dir argument of Selenium
- Selenium: Point towards default Chrome session
其他注意事项
确保:
- 硒已升级到当前发布的Version 3.141.0。
- ChromeDriver 已更新为当前的ChromeDriver v86.0级别。
- Chrome 已更新为当前的 Chrome版本86.0 级别。 (根据ChromeDriver v86.0 release notes)。
- 以非root用户用户的身份执行
@Test
。 - 始终在
driver.quit()
方法内调用tearDown(){}
,以优雅地关闭和销毁 WebDriver 和 Web Client 实例。
tl;博士
ChromeDriver remote debug port reservation race conditions
,切换到 FireFox 驱动程序。我在 Chrome 上遇到了同样的问题。
,这可能是因为ChromeDriver版本过旧。尝试下载较新的版本,然后重试执行脚本。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。