kazurayam / chromedriverfactory

A Java library that enables you to launch Selenium ChromeDriver using an existing user Profile. That let you to carry cookies over multiple HTTP sessions via user Profile.
0 stars 0 forks source link

WebDriverManager requires GitHub Personal Access Token to get GeckoDriver #31

Closed kazurayam closed 2 years ago

kazurayam commented 2 years ago

At https://github.com/kazurayam/webdriverfactory/commit/ce219c9a50658e7af20e58614a548dd8176dec8c

FirefoxDriverFactoryTest encountered an error

> Task :compileJava NO-SOURCE
> Task :compileGroovy UP-TO-DATE
> Task :processResources NO-SOURCE
> Task :classes UP-TO-DATE
> Task :compileTestJava NO-SOURCE
> Task :compileTestGroovy
> Task :processTestResources NO-SOURCE
> Task :testClasses
> Task :test
Connected to the target VM, address: 'localhost:60541', transport: 'socket'
[Test worker] INFO io.github.bonigarcia.wdm.WebDriverManager - Using geckodriver 0.30.0 (resolved driver for Firefox 95)
[Test worker] INFO io.github.bonigarcia.wdm.WebDriverManager - Reading https://api.github.com/repos/mozilla/geckodriver/releases to seek geckodriver
[Test worker] ERROR io.github.bonigarcia.wdm.online.HttpClient - Error HTTP 401 executing https://api.github.com/repos/mozilla/geckodriver/releases
[Test worker] WARN io.github.bonigarcia.wdm.WebDriverManager - There was an error managing geckodriver 0.30.0 (Error HTTP 401 executing https://api.github.com/repos/mozilla/geckodriver/releases) ... trying again using latest driver stored in cache
[Test worker] INFO io.github.bonigarcia.wdm.WebDriverManager - Using geckodriver 0.30.0 (resolved driver for Firefox 95)
[Test worker] INFO io.github.bonigarcia.wdm.WebDriverManager - Reading https://api.github.com/repos/mozilla/geckodriver/releases to seek geckodriver
[Test worker] ERROR io.github.bonigarcia.wdm.online.HttpClient - Error HTTP 401 executing https://api.github.com/repos/mozilla/geckodriver/releases
[Test worker] ERROR io.github.bonigarcia.wdm.WebDriverManager - There was an error managing geckodriver 0.30.0 (Error HTTP 401 executing https://api.github.com/repos/mozilla/geckodriver/releases)
io.github.bonigarcia.wdm.config.WebDriverManagerException: Error HTTP 401 executing https://api.github.com/repos/mozilla/geckodriver/releases
    at io.github.bonigarcia.wdm.online.HttpClient.execute(HttpClient.java:172)
    at io.github.bonigarcia.wdm.WebDriverManager.openGitHubConnection(WebDriverManager.java:1316)
    at io.github.bonigarcia.wdm.WebDriverManager.getDriversFromGitHub(WebDriverManager.java:1330)
    at io.github.bonigarcia.wdm.managers.FirefoxDriverManager.getDriverUrls(FirefoxDriverManager.java:95)
    at io.github.bonigarcia.wdm.WebDriverManager.createUrlHandler(WebDriverManager.java:1161)
    at io.github.bonigarcia.wdm.WebDriverManager.download(WebDriverManager.java:1009)
    at io.github.bonigarcia.wdm.WebDriverManager.manage(WebDriverManager.java:927)
    at io.github.bonigarcia.wdm.WebDriverManager.fallback(WebDriverManager.java:1156)
    at io.github.bonigarcia.wdm.WebDriverManager.handleException(WebDriverManager.java:1133)
    at io.github.bonigarcia.wdm.WebDriverManager.manage(WebDriverManager.java:933)
    at io.github.bonigarcia.wdm.WebDriverManager.setup(WebDriverManager.java:337)
    at io.github.bonigarcia.wdm.WebDriverManager$setup$0.call(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:120)
    at com.kazurayam.webdriverfactory.firefox.FirefoxDriverFactoryTest.beforeClass(FirefoxDriverFactoryTest.groovy:24)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:110)
    at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58)
    at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:38)
    at org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:62)
    at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
    at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
    at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
    at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
    at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
    at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:121)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
    at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
    at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:182)
    at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:164)
    at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:414)
    at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
    at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
    at java.lang.Thread.run(Thread.java:748)
kazurayam commented 2 years ago

https://bonigarcia.dev/webdrivermanager/#known-issues

  1. Known Issues HTTP response code 403 Some of the drivers (e.g., geckodriver or operadriver) are hosted on GitHub. When external clients (like WebDriverManager) makes many consecutive requests to GitHub, and due to its traffic rate limit, it eventually responds with an HTTP 403 error (forbidden), as follows: ... To avoid this problem, WebDriverManager can make authenticated requests using a personal access token. See the advanced configuration section to discover how to set up this token in WebDriverManager.

... seems this is not the cause of my issue (HTTP response code 401 )

kazurayam commented 2 years ago

https://github.com/bonigarcia/webdrivermanager/issues/708 this post tells that the reason is too old version of WebDriverManager.

In my project, I am using v5.0.3. Is it too old?

kazurayam commented 2 years ago
スクリーンショット 2022-01-12 8 27 34

v5.0.3 seems to be the latest one

kazurayam commented 2 years ago

Firefox version of my Mac is 96.0 (64bit), the latest one

スクリーンショット 2022-01-12 8 21 05
kazurayam commented 2 years ago

I tried to open the URL https://api.github.com/repos/mozilla/geckodriver/releases manually on browser, then I got a valid JSON response.

スクリーンショット 2022-01-12 8 31 56

So the URL is OK, but WebDriverManager on my Mac could not get it.

kazurayam commented 2 years ago

I created a new GitHub Personal Access Token. Using it I configured WebDriverManager as follows

@BeforeClass
    static void beforeClass() {
        // GitHub Personal Access Token
        String GHT = 'ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
        WebDriverManager.firefoxdriver().gitHubToken(GHT).setup()
    }

It ran OK.

Why I got 401 Unauthorized? --- Possibly the Access Token string I used was wrong.


I know I should never write the Access Token inline. I will bring the Access Token out of the code and put it into some KeyStore.