Kum*_*ath 120 selenium google-chrome webdriver selenium-chromedriver selenium-webdriver
我正在尝试使用URL启动chrome,浏览器启动,之后它什么都不做.
我在1分钟后看到以下错误:
Unable to open browser with url: 'https://www.google.com' (Root cause: org.openqa.selenium.WebDriverException: unknown error: DevToolsActivePort file doesn't exist
(Driver info: chromedriver=2.39.562718 (9a2698cba08cf5a471a29d30c8b3e12becabb0e9),platform=Windows NT 10.0.15063 x86_64) (WARNING: The server did not provide any stacktrace information)
Run Code Online (Sandbox Code Playgroud)
我的配置:
Chrome:66 ChromeBrowser:2.39.56
PS在Firefox中一切正常
Deb*_*anB 55
此错误消息...
org.openqa.selenium.WebDriverException: unknown error: DevToolsActivePort file doesn't exist
Run Code Online (Sandbox Code Playgroud)
...暗示ChromeDriver无法启动/生成新的WebBrowser即Chrome浏览器会话.
您的代码试验和所有二进制文件的版本信息会给我们一些关于出错的提示.
但是根据Add --disable-dev-shm-usage到默认启动标志似乎添加参数--disable-dev-shm-usage将临时解决问题.
如果您希望启动/跨越新的Chrome浏览器会话,可以使用以下解决方案:
System.setProperty("webdriver.chrome.driver", "C:\\path\\to\\chromedriver.exe");
ChromeOptions options = new ChromeOptions();
options.addArguments("start-maximized"); // open Browser in maximized mode
options.addArguments("disable-infobars"); // disabling infobars
options.addArguments("--disable-extensions"); // disabling extensions
options.addArguments("--disable-gpu"); // applicable to windows os only
options.addArguments("--disable-dev-shm-usage"); // overcome limited resource problems
options.addArguments("--no-sandbox"); // Bypass OS security model
WebDriver driver = new ChromeDriver(options);
driver.get("https://google.com");
Run Code Online (Sandbox Code Playgroud)
根据base_switches.cc disable-dev-shm-usage似乎只在Linux操作系统上有效:
#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
// The /dev/shm partition is too small in certain VM environments, causing
// Chrome to fail or crash (see http://crbug.com/715363). Use this flag to
// work-around this issue (a temporary directory will always be used to create
// anonymous shared memory files).
const char kDisableDevShmUsage[] = "disable-dev-shm-usage";
#endif
Run Code Online (Sandbox Code Playgroud)
在讨论中添加一个选项以使用/ tmp而不是/ dev/shm David提到:
我认为这将取决于/ dev/shm和/ tmp的安装方式.如果他们都作为tmpfs安装我假设没有任何区别.如果由于某种原因,/ tmp未映射为tmpfs(我认为默认情况下由systemd映射为tmpfs),Chrome共享内存管理总是在创建匿名共享文件时将文件映射到内存中,所以即使在这种情况下也不应该差别很大.我想你可以在启用标志的情况下强制进行遥测测试,看看它是怎么回事.
至于为什么不默认使用它,它是由共享内存团队推回的,我想有意义的是默认情况下应该使用/ dev/shm作为共享内存.
最终所有这一切都应该转向使用memfd_create,但我认为这不会很快发生,因为它需要显着重构Chrome内存管理.
Pet*_*ley 38
我在2018-06-04周一开始看到这个问题.我们的测试每个工作日运行.似乎唯一改变的是google-chrome版本(已经更新到当前版本)JVM和Selenium是Linux机器上的最新版本(Java 1.8.0_151,selenium 3.12.0,google-chrome 67.0.3396.62,以及xvfb的运行).
特别添加参数" --no-sandbox "和" --disable-dev-shm-usage "停止了错误.我将调查这些问题以查找有关效果的更多信息,以及触发google-chrome更新的其他问题.
ChromeOptions options = new ChromeOptions();
...
options.addArguments("--no-sandbox");
options.addArguments("--disable-dev-shm-usage");
Run Code Online (Sandbox Code Playgroud)
小智 27
我们在jenkins奴隶(linux机器)上遇到了同样的问题,并尝试了上面的所有选项.
唯一有帮助的是设定论点
chrome_options.add_argument('--headless')
Run Code Online (Sandbox Code Playgroud)
但是当我们进一步调查时,注意到XVFB屏幕没有启动属性,这就是导致此错误.在我们修复XVFB屏幕后,它解决了这个问题.
raf*_*asa 21
就我而言,这是 ubuntu 服务器上 CI 代理帐户的问题,我使用自定义--user-data-dir解决了这个问题
chrome_options.add_argument('--user-data-dir=~/.config/google-chrome')
CI 代理使用的我的帐户没有必要的权限,有趣的是一切都在 root 帐户上运行
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--disable-dev-shm-usage')
chrome_options.add_argument('--profile-directory=Default')
chrome_options.add_argument('--user-data-dir=~/.config/google-chrome')
driver = webdriver.Chrome(options=chrome_options)
url = 'https://www.google.com'
driver.get(url)
get_url = driver.current_url
print(get_url)
Run Code Online (Sandbox Code Playgroud)
小智 20
我在python中遇到了同样的问题.以上帮助.这是我在python中使用的 -
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
driver = webdriver.Chrome('/path/to/your_chrome_driver_dir/chromedriver',chrome_options=chrome_options)
Run Code Online (Sandbox Code Playgroud)
Lel*_*uch 18
在首先单独下载 chromedriver 然后使用 Python Selenium 后,我在 Ubuntu 20 上遇到了这个问题,sudo apt install chromium-browser尽管它们是相同的版本,但这种情况一直在发生。
我的解决方法是使用 repo 包附带的提供的 chrome 驱动程序位于
/snap/bin/chromium.chromedriver
driver = webdriver.Chrome(chrome_options=options, executable_path='/snap/bin/chromium.chromedriver')
Run Code Online (Sandbox Code Playgroud)
Soh*_*ani 17
在我的情况下,在以下环境中:
3.7.5C:\Windows3.141.0我需要将参数--no-sandbox和对象添加--remote-debugging-port=9222到ChromeOptions对象中,并通过以管理员身份使用 Powershell/cmd 来以管理员用户身份运行代码。
这是相关的一段代码:
options = webdriver.ChromeOptions()
options.add_argument('headless')
options.add_argument('--disable-infobars')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--no-sandbox')
options.add_argument('--remote-debugging-port=9222')
driver = webdriver.Chrome(options=options)
Run Code Online (Sandbox Code Playgroud)
eNc*_*Nca 14
错误消息的可能原因有很多RESPONSE InitSession ERROR unknown error: DevToolsActivePort file doesn't exist(从这个问题的答案数量可以看出)。因此,让我们更深入地解释此错误消息的确切含义。
根据 chromedriver 源代码,该消息是在ParseDevToolsActivePortFile方法中创建的。该方法在启动 chrome process后从循环中调用。
在循环中,驱动程序检查 chrome 进程是否仍在运行以及该ParseDevToolsActivePortFile文件是否已由 chrome 创建。此循环有一个硬编码的 60 秒超时。
我发现此消息可能有两个原因:
Kum*_*ath 13
更新:
我能够解决这个问题,现在我可以使用所需的URL访问chrome.
尝试提供的解决方案的结果:
我尝试了上面提供的所有设置,但我无法解决问题
关于这个问题的解释:
根据我的观察,当chrome无法在scoped_dirXXXXX文件夹中找到它的引用时,会导致DevToolsActivePort文件不存在.
采取措施解决问题
添加以下代码以调用chrome
System.setProperty("webdriver.chrome.driver","pathto\\chromedriver.exe");
ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("useAutomationExtension", false);
WebDriver driver = new ChromeDriver(options);
driver.get(url);
Run Code Online (Sandbox Code Playgroud)使用上述步骤,我能够解决问题.
谢谢你的回答.
rad*_*mir 11
当 chromedriver 无法确定 chrome 正在使用哪个调试端口时,就会发生这种情况。
一种可能的原因是HKEY_CURRENT_USER\Software\Policies\Google\Chrome\UserDataDir存在开放缺陷
但在我的最后一个案例中,这是其他一些不明原因。
幸运的是,手动设置端口号是有效的:
final String[] args = { "--remote-debugging-port=9222" };
options.addArguments(args);
WebDriver driver = new ChromeDriver(options);
Run Code Online (Sandbox Code Playgroud)
Sat*_*tan 10
我知道这是一个老问题并且已经有很多答案。然而,我遇到了这个问题,遇到了这个线程,并且所提出的解决方案都没有帮助。经过几天(!)的研究,我终于找到了解决方案:
我的问题是我selenium/standalone-chrome在配备 M1 芯片的 MacBook 上使用该图像。切换到seleniarm/standalone-chromium一切终于开始工作后。
小智 8
我在这个问题上坚持了很长时间,最后通过添加一个附加选项来修复它:
options.addArguments("--crash-dumps-dir=/tmp")
最近我遇到了同样的问题,经过反复试验,它也对我有用。
必须在最前面:
options.addArguments("--no-sandbox"); //has to be the very first option
Run Code Online (Sandbox Code Playgroud)
BaseSeleniumTests.java
public abstract class BaseSeleniumTests {
private static final String CHROMEDRIVER_EXE = "chromedriver.exe";
private static final String IEDRIVER_EXE = "IEDriverServer.exe";
private static final String FFDRIVER_EXE = "geckodriver.exe";
protected WebDriver driver;
@Before
public void setUp() {
loadChromeDriver();
}
@After
public void tearDown() {
if (driver != null) {
driver.close();
driver.quit();
}
}
private void loadChromeDriver() {
ClassLoader classLoader = getClass().getClassLoader();
String filePath = classLoader.getResource(CHROMEDRIVER_EXE).getFile();
DesiredCapabilities capabilities = DesiredCapabilities.chrome();
ChromeDriverService service = new ChromeDriverService.Builder()
.usingDriverExecutable(new File(filePath))
.build();
ChromeOptions options = new ChromeOptions();
options.addArguments("--no-sandbox"); // Bypass OS security model, MUST BE THE VERY FIRST OPTION
options.addArguments("--headless");
options.setExperimentalOption("useAutomationExtension", false);
options.addArguments("start-maximized"); // open Browser in maximized mode
options.addArguments("disable-infobars"); // disabling infobars
options.addArguments("--disable-extensions"); // disabling extensions
options.addArguments("--disable-gpu"); // applicable to windows os only
options.addArguments("--disable-dev-shm-usage"); // overcome limited resource problems
options.merge(capabilities);
this.driver = new ChromeDriver(service, options);
}
}
Run Code Online (Sandbox Code Playgroud)
GoogleSearchPageTraditionalSeleniumTests.java
@RunWith(SpringRunner.class)
@SpringBootTest
public class GoogleSearchPageTraditionalSeleniumTests extends BaseSeleniumTests {
@Test
public void getSearchPage() {
this.driver.get("https://www.google.com");
WebElement element = this.driver.findElement(By.name("q"));
assertNotNull(element);
}
}
Run Code Online (Sandbox Code Playgroud)
pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)
正如另一个答案中所述:
此错误消息...暗示 ChromeDriver 无法启动/生成新的 WebBrowser,即 Chrome 浏览器会话。
其中可能的原因,我想提一提的是,如果你正在运行通过Xvfb来的无头铬的事实,你可能需要export的DISPLAY变量:在我的情况,我在的地方(推荐使用),--disable-dev-shm-usage和--no-sandbox选择,一切都运行良好,但在运行最新(在撰写本文时)Ubuntu 18.04 的新安装中,此错误开始发生,唯一可能的解决方法是执行一个export DISPLAY=":20"(之前已使用 启动 Xvfb Xvfb :20&)。
您可能会因为向 Chrome 传递错误的参数而收到此错误。例如,如果我"headless"作为参数传递给 C# ChromeDriver,它会启动得很好。如果我犯了一个错误并使用了错误的语法,"--headless"我就会收到DevToolsActivePort file doesn't exist错误。
老问题,但类似的问题几乎让我发疯,所以分享我的解决方案。其他建议都没有解决我的问题。
当我将 Docker 映像 Chrome 安装从旧版本更新到 Chrome 86 时,出现此错误。我的设置并不相同,但我们通过 selenium webdriver 实例化 Chrome。
解决方案是将选项作为goog:chromeOptions散列而不是chromeOptions散列传递。我真的不知道这是 Selenium、Chrome、Chromedriver 还是其他更新,但也许一些可怜的灵魂将来会在这个答案中找到安慰。
| 归档时间: |
|
| 查看次数: |
114314 次 |
| 最近记录: |