Git Product home page Git Product logo

etoro-api's Introduction

Etoro trading API

CI Docker Image Build

Support project:

BTC: 3FRPsX4QsNNFzKZwtXh92JfKeetWJcn3SY

ETH: 0x8134888B3429aea645b34fcd576842a204d9C9aE

Requirments:
  • java 11 (JDK11)
  • Google Chrome (tested on version 78)
  • internet connection
Build executable jar
./gradlew build
Set your account credentials into Environment variables: LOGIN, PASSWORD
export LOGIN=yourusername
export PASSWORD=yourpassword
Start API server
 java -jar build/libs/etoro-api-0.0.1-SNAPSHOT.jar

Execute Requests

All requests are in the postman collection under postman/ import it to the Postman and try it out.

Using API server

All requests are in the postman collection under postman/ import it to the Postman and try it out.

In order to trade you have to add asset to watchlist first, then you can open or close positions with this asset. Your watchlist will be persisted locally in the watchlist.json if you start the server from the project folder.

Examples

Buy in Demo mode

1 Adding asset to your watchlist

Bitcoin

 curl -X PUT \
   http://localhost:8088/etoro-api/watchlist/byName \
   -H 'Content-Type: application/json' \
   -H 'cache-control: no-cache' \
   -d '{
 	"param": "btc"
 }'
NASDQ100
 curl -X PUT \
   http://localhost:8088/etoro-api/watchlist/byName \
   -H 'Content-Type: application/json' \
   -H 'cache-control: no-cache' \
   -d '{
 	"param": "nsdq100"
 }'
GOLD
 curl -X PUT \
   http://localhost:8088/etoro-api/watchlist/byName \
   -H 'Content-Type: application/json' \
   -H 'cache-control: no-cache' \
   -d '{
 	"param": "gold"
 }'

1.1 Review your watchlist

curl -X GET \
  http://localhost:8088/etoro-api/watchlist \
  -H 'cache-control: no-cache' \
  -H 'mode: Demo'

2 Open position

curl -X POST \
  http://localhost:8088/etoro-api/positions/open \
  -H 'Content-Type: application/json' \
  -H 'mode: Demo' \
  -d '{
	"name": "btc",
	"type": "BUY",
	"amount": 100,
	"leverage": 2,
	"takeProfitRate": 13000,
	"stopLossRate": 1000
}'
Make sure that "takeProfit" and "stopLoss" have valid values.
for some trades (all x1 buy) they are optional.

Response:

{
    "date": "2020-02-22T12:28:53.574543",
    "requestToken": "a859ec38-12bd-41b2-87f3-205515f2d608",
    "errorMessageCode": 0,
    "notificationParams": null,
    "position": {
        "leverage": 2,
        "stopLossRate": 8000,
        "takeProfitRate": 13000,
        "amount": 100,
        "instrumentID": "100000",
        "positionID": "1621284697",
        "isBuy": true,
        "isTslEnabled": false,
        "view_MaxPositionUnits": 0,
        "view_Units": 0,
        "view_openByUnits": null,
        "isDiscounted": false,
        "viewRateContext": null,
        "openDateTime": "2020-02-22T11:28:53.3993309",
	"openRate": 10100.1
    }
}

you can use positionID to close this position later on.

Close BTC position in Demo mode

curl -X DELETE \
  'http://localhost:8088/etoro-api/positions/close?id=1621284697' \
  -H 'mode: Demo'

etoro-api's People

Contributors

mkjiau avatar mortenscheel avatar ok24601 avatar tkwong avatar tszkan avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

etoro-api's Issues

no mapping for Get /etoro-api/swagger-ui.html

when trying the 1.4 update i found that the api has no mapping
JPY, 100256=DASHGBP, 100257=USDXUSD, 100263=GOLDBTC, 100269=BTCGRAM, 100270=GRAM, 100271=ETHGRAM, 100272=GRAMEUR}
2021-03-15 11:52:57.496 INFO 3812 --- [ main] o.s.s.c.ThreadPoolTaskScheduler : Initializing ExecutorService 'messageBrokerTaskScheduler'
2021-03-15 11:52:57.553 INFO 3812 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'brokerChannelExecutor'
2021-03-15 11:52:57.612 INFO 3812 --- [ main] pertySourcedRequestMappingHandlerMapping : Mapped URL path [/v2/api-docs] onto method [springfox.documentation.swagger2.web.Swagger2Controller#getDocumentation(String, HttpServletRequest)]
2021-03-15 11:52:57.694 INFO 3812 --- [ main] d.s.w.p.DocumentationPluginsBootstrapper : Context refreshed
2021-03-15 11:52:57.704 INFO 3812 --- [ main] d.s.w.p.DocumentationPluginsBootstrapper : Found 1 custom documentation plugin(s)
2021-03-15 11:52:57.760 INFO 3812 --- [ main] s.d.s.w.s.ApiListingReferenceScanner : Scanning for api listing references
2021-03-15 11:52:58.440 INFO 3812 --- [ main] o.s.m.s.b.SimpleBrokerMessageHandler : Starting...
2021-03-15 11:52:58.441 INFO 3812 --- [ main] o.s.m.s.b.SimpleBrokerMessageHandler : BrokerAvailabilityEvent[available=true, SimpleBrokerMessageHandler [DefaultSubscriptionRegistry[cache[0 destination(s)], registry[0 sessions]]]]
2021-03-15 11:52:58.443 INFO 3812 --- [ main] o.s.m.s.b.SimpleBrokerMessageHandler : Started.
2021-03-15 11:52:58.483 INFO 3812 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8088 (http) with context path '/etoro-api'
2021-03-15 11:52:58.488 INFO 3812 --- [ main] ok.work.etoroapi.EtoroApiApplicationKt : Started EtoroApiApplicationKt in 17.334 seconds (JVM running for 17.966)
2021-03-15 11:53:17.326 INFO 3812 --- [nio-8088-exec-1] o.a.c.c.C.[.[localhost].[/etoro-api] : Initializing Spring DispatcherServlet 'dispatcherServlet'
2021-03-15 11:53:17.327 INFO 3812 --- [nio-8088-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2021-03-15 11:53:17.345 INFO 3812 --- [nio-8088-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 11 ms
2021-03-15 11:53:17.374 WARN 3812 --- [nio-8088-exec-1] o.s.web.servlet.PageNotFound : No mapping for GET /etoro-api/swagger-ui.html
2021-03-15 11:53:57.553 INFO 3812 --- [MessageBroker-1] o.s.w.s.c.WebSocketMessageBrokerStats : WebSocketSession[0 current WS(0)-HttpStream(0)-HttpPoll(0), 0 total, 0 closed abnormally (0 connect failure, 0 send limit, 0 transport error)], stompSubProtocol[processed CONNECT(0)-CONNECTED(0)-DISCONNECT(0)], stompBrokerRelay[null], inboundChannel[pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 0], outboundChannel[pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 0], sockJsScheduler[pool size = 1, active threads = 1, queued tasks = 0, completed tasks = 0]

Cloudflare 1020

I'm getting 403 for login with some cloudflare error saying "Please enable cookies". Have you encountered something like this?

Gradlew build Errors

What is going/ am I doing wrong?

C:\Users\User\Downloads\etoro-api-master>gradlew build
Starting a Gradle Daemon (subsequent builds will be faster)

Task :compileKotlin FAILED

FAILURE: Build failed with an exception.

  • What went wrong:
    Execution failed for task ':compileKotlin'.

Could not resolve all files for configuration ':compileClasspath'.
Could not resolve com.lightstreamer:ls-log-adapter-java:1.0.0.
Required by:
project : > com.lightstreamer:ls-javase-client:3.1.1
> Could not resolve com.lightstreamer:ls-log-adapter-java:1.0.0.
> Could not get resource 'https://www.lightstreamer.com/repo/maven/com/lightstreamer/ls-log-adapter-java/1.0.0/ls-log-adapter-java-1.0.0.pom'.
> Could not GET 'https://mvn.lightstreamer.com/com/lightstreamer/ls-log-adapter-java/1.0.0/ls-log-adapter-java-1.0.0.pom'. Received status code 403 from server: Forbidden

  • Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

  • Get more help at https://help.gradle.org

Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/6.3/userguide/command_line_interface.html#sec:command_line_warnings

BUILD FAILED in 6s
1 actionable task: 1 executed

Application run failed

Encountered some problems at start api server

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2021-06-11 21:04:14.681 ERROR 4203 --- [           main] o.s.boot.SpringApplication               : Application run failed

Anyone have an idea to solve this?

org.json.JSONException: A JSONObject text must begin with '{' at 1 [character 2 line 1]

when trying to start the API today i was greeted by this line..
I tried updating the project files from 1.1.3 to 1.1.4, but allas this did not fix my problem.
might anyone know how to fix this?


full output in attatched file, but this is the 'caused by' list

error log.docx

Caused by: org.json.JSONException: A JSONObject text must begin with '{' at 1 [character 2 line 1]
at org.json.JSONTokener.syntaxError(JSONTokener.java:505) ~[json-20180813.jar!/:na]
at org.json.JSONObject.(JSONObject.java:215) ~[json-20180813.jar!/:na]
at org.json.JSONObject.(JSONObject.java:399) ~[json-20180813.jar!/:na]
at ok.work.etoroapi.client.UserContext.getAccountData(UserContext.kt:45) ~[classes!/:na]
at ok.work.etoroapi.client.UserContext.setupAuthorizationContext(UserContext.kt:36) ~[classes!/:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:389) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:333) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:157) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
... 39 common frames omitted

allow Poost request to the api controller

whilst working with the api, i found that the 'PUT' and 'POST' methods from pythons request library are not allowed (see bellow for error code)

{"timestamp":"2021-03-29T08:33:28.687+0000","status":405,"error":"Method Not Allowed","message":"Request method 'POST' not supported","path":"/etoro-api/swagger-ui.html"}

the code i'm running is as follows

import requests

url = 'http://localhost:8088/etoro-api/swagger-ui.html#/positions-controller/openPositionUsingPOST'
headers = {
'Content-type': 'application/json',
'mode': 'Demo'
}

data = {"name": "silver", "type": "BUY", "amount": 1000, "leverage": 1,"takeProfitAmountRate": 10, "stopLossAmountRate": 50 }

response = requests.post(url, data=data, headers=headers)
print(response.text)

anyone know a wayaround this block?

Open Position: Code: 612, details: null

Hi very nice project!
Im trying to open position and im getting: Code: 612, details: null
using this:

curl -X POST \
  http://localhost:8088/etoro-api/positions/open \
  -H 'Content-Type: application/json' \
  -H 'mode: Demo' \
  -d '{
	"name": "btc",
	"type": "BUY",
	"amount": 100,
	"leverage": 2,
	"takeProfitRate": 13000,
	"stopLossRate": 1000
}'

Any thoughts?

Error creating bean with name 'assetsController': Unsatisfied dependency expressed through field 'httpClient'

For some reason from one day to the other, all versions fail for me - native PopOS version, AWS Ubuntu Image Version, and docker Image.
Maybe a problem with the newest chrome? It worked before (2 days ago)

Build info: version: 'unknown', revision: 'unknown', time: 'unknown'
System info: host: '571d4777e650', ip: '172.17.0.2', os.name: 'Linux', os.arch: 'amd64', os.version: '5.8.0-7630-generic', java.version: '11.0.10'```

Cloudflare blocking user-agent

while calling getAccountData the response is "error 1020". You can avoid this by changing the user-agent to
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36"
In RequestUtils.prepareRequest(..). This worked for me. The error itselfs seems to be thrown by cloudflare.

Greetings

None SELL price available for id

Hi i am trying to open SELL position for some assets its working fine, for example bitcoin. But some are throwing None SELL price available for id. For example CAN id: 6317 i can open sell position in etoro but with this API i`m getting None SELL price available for id 6317.
Im trying all variations with takeProfitRate and stopLossRate and without them, tls on of ...

Error code Code: 796 while creating new positions with leverage

Hello,

Really nice work. Thank you for your time and implication.

Currently I think it is an issue with opening new positions.

{
  "name": "aapl",
  "type": "BUY",
  "amount": 500,
  "leverage": 2
}

leverage on aapl works on web ui but on api level this error is prompted:

{
    "timestamp": "2020-09-29T17:21:50.753+0000",
    "status": 500,
    "error": "Internal Server Error",
    "message": "Code: 796, details: null",
    "path": "/etoro-api/positions/open"
}

It works only with leverage 1.

Did you take into consideration to update it in order to create limit orders?
Thank you!

None BUY price available for id 18

Hey, when trying to buy I'm getting
{"timestamp":"2021-01-29T07:40:07.404+0000","status":500,"error":"Internal Server Error","message":"None BUY price available for id 18","path":"/etoro-api/positions/open"}

Also on the watchlist it says marketOpen null, buy null and so on, even though it is possible to trade on the website...

{"id":"18","name":"gold","fullName":"Gold","buy":null,"sell":null,"marketOpen":null,"askDiscounted":0.0,"bidDiscounted":0.0}

Any ideas?

Error creating bean with name 'browserHttpClient': Unsatisfied dependency expressed through field 'metadataService'

. ____ _ __ _ _
/\ / ' __ _ () __ __ _ \ \ \
( ( )_
_ | '_ | '| | ' / ` | \ \ \
\/ )| |)| | | | | || (| | ) ) ) )
' |
| .__|| ||| |_, | / / / /
=========|
|==============|/=////
:: Spring Boot :: (v2.2.4.RELEASE)

2021-08-22 19:29:04.191 INFO 18672 --- [ main] ok.work.etoroapi.EtoroApiApplicationKt : Starting EtoroApiApplicationKt on DESKTOP-MD2CT0Q with PID 18672 (D:\MyWork\StocksTrading\Sandboxes\eToro\etoro-api\build\libs\etoro-api-0.1.4.jar started by essam in D:\MyWork\StocksTrading\Sandboxes\eToro\etoro-api)
2021-08-22 19:29:04.196 INFO 18672 --- [ main] ok.work.etoroapi.EtoroApiApplicationKt : No active profile set, falling back to default profiles: default
2021-08-22 19:29:05.721 INFO 18672 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8088 (http)
2021-08-22 19:29:05.734 INFO 18672 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2021-08-22 19:29:05.734 INFO 18672 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.30]
2021-08-22 19:29:05.806 INFO 18672 --- [ main] o.a.c.c.C.[.[localhost].[/etoro-api] : Initializing Spring embedded WebApplicationContext
2021-08-22 19:29:05.807 INFO 18672 --- [ main] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 1547 ms
Starting ChromeDriver 92.0.4515.107 (87a818b10553a07434ea9e2b6dccf3cbe7895134-refs/branch-heads/4515@{#1634}) on port 7414
Only local connections are allowed.
Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe.
ChromeDriver was started successfully.
2021-08-22 19:29:07.614 INFO 18672 --- [ null to remote] o.o.selenium.remote.ProtocolHandshake : Detected dialect: W3C
2021-08-22 19:29:25.830 WARN 18672 --- [ main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'browserHttpClient': Unsatisfied dependency expressed through field 'metadataService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'etoroMetadataService': Invocation of init method failed; nested exception is java.lang.RuntimeException: Failed to retrieve token
2021-08-22 19:29:25.833 INFO 18672 --- [ main] o.apache.catalina.core.StandardService : Stopping service [Tomcat]
2021-08-22 19:29:25.856 INFO 18672 --- [ main] ConditionEvaluationReportLoggingListener :

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2021-08-22 19:29:25.862 ERROR 18672 --- [ main] o.s.boot.SpringApplication : Application run failed

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'browserHttpClient': Unsatisfied dependency expressed through field 'metadataService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'etoroMetadataService': Invocation of init method failed; nested exception is java.lang.RuntimeException: Failed to retrieve token
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:643) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:116) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1422) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:594) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:879) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:878) ~[spring-context-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550) ~[spring-context-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141) ~[spring-boot-2.2.4.RELEASE.jar!/:2.2.4.RELEASE]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747) ~[spring-boot-2.2.4.RELEASE.jar!/:2.2.4.RELEASE]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) ~[spring-boot-2.2.4.RELEASE.jar!/:2.2.4.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) ~[spring-boot-2.2.4.RELEASE.jar!/:2.2.4.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) ~[spring-boot-2.2.4.RELEASE.jar!/:2.2.4.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215) ~[spring-boot-2.2.4.RELEASE.jar!/:2.2.4.RELEASE]
at ok.work.etoroapi.EtoroApiApplicationKt.main(EtoroApiApplication.kt:54) ~[classes!/:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:564) ~[na:na]
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48) ~[etoro-api-0.1.4.jar:na]
at org.springframework.boot.loader.Launcher.launch(Launcher.java:87) ~[etoro-api-0.1.4.jar:na]
at org.springframework.boot.loader.Launcher.launch(Launcher.java:51) ~[etoro-api-0.1.4.jar:na]
at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:52) ~[etoro-api-0.1.4.jar:na]
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'etoroMetadataService': Invocation of init method failed; nested exception is java.lang.RuntimeException: Failed to retrieve token
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:160) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:416) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1788) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:595) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1287) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1207) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
... 27 common frames omitted
Caused by: java.lang.RuntimeException: Failed to retrieve token
at ok.work.etoroapi.client.browser.EtoroMetadataService.login(EtoroBrowserContext.kt:75) ~[classes!/:na]
at ok.work.etoroapi.client.browser.EtoroMetadataService.init(EtoroBrowserContext.kt:45) ~[classes!/:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:564) ~[na:na]
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:389) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:333) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:157) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
... 39 common frames omitted

Error creating bean with name "authorizationContext"

Hey, any ideas?
Windows 10, JDK 11

g.springframework.beans.factory.BeanCreationException: Error creating bean with name 'authorizationContext': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: restricted header name: "origin" at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:160) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:416) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1788) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:595) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE] at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:879) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:878) ~[spring-context-5.2.3.RELEASE.jar!/:5.2.3.RELEASE] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550) ~[spring-context-5.2.3.RELEASE.jar!/:5.2.3.RELEASE] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141) ~[spring-boot-2.2.4.RELEASE.jar!/:2.2.4.RELEASE] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747) ~[spring-boot-2.2.4.RELEASE.jar!/:2.2.4.RELEASE] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) ~[spring-boot-2.2.4.RELEASE.jar!/:2.2.4.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) ~[spring-boot-2.2.4.RELEASE.jar!/:2.2.4.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) ~[spring-boot-2.2.4.RELEASE.jar!/:2.2.4.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215) ~[spring-boot-2.2.4.RELEASE.jar!/:2.2.4.RELEASE] at ok.work.etoroapi.EtoroApiApplicationKt.main(EtoroApiApplication.kt:52) ~[classes!/:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48) ~[etoro-api-0.1.2.jar:na] at org.springframework.boot.loader.Launcher.launch(Launcher.java:87) ~[etoro-api-0.1.2.jar:na] at org.springframework.boot.loader.Launcher.launch(Launcher.java:51) ~[etoro-api-0.1.2.jar:na] at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:52) ~[etoro-api-0.1.2.jar:na] Caused by: java.lang.IllegalArgumentException: restricted header name: "origin" at java.net.http/jdk.internal.net.http.common.Utils.newIAE(Utils.java:246) ~[java.net.http:na] at java.net.http/jdk.internal.net.http.HttpRequestBuilderImpl.checkNameAndValue(HttpRequestBuilderImpl.java:110) ~[java.net.http:na] at java.net.http/jdk.internal.net.http.HttpRequestBuilderImpl.header(HttpRequestBuilderImpl.java:126) ~[java.net.http:na] at java.net.http/jdk.internal.net.http.HttpRequestBuilderImpl.header(HttpRequestBuilderImpl.java:43) ~[java.net.http:na] at ok.work.etoroapi.client.AuthorizationContext.auth(AuthorizationContext.kt:56) ~[classes!/:na] at ok.work.etoroapi.client.AuthorizationContext.setupAuthorizationContext(AuthorizationContext.kt:40) ~[classes!/:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:389) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE] at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:333) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE] at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:157) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE] ... 26 common frames omitted

Portfolio data

Hi, it's possible to view portfolio data such as available amount, assets value etc..., simply the data in the bottom bar in the portfolio section of etoro dashboard.
Thanks

error starting spring

When trying to play with the api, it suddenly didnt want to start. anyone anny clue on how to fix this ?

the specific error is "Error creating bean with name 'etoroMetadataService': Invocation of init method failed; nested exception is org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {"method":"css selector","selector":".w-login-btn-wrapp button"}
(Session info: chrome=88.0.4324.182)"

but here is the full output


java JDK11.0.10
windows 10

-jar build/libs/etoro-api-0.1.3.jar

. ____ _ __ _ _
/\ / ' __ _ () __ __ _ \ \ \
( ( )_
_ | '_ | '| | ' / ` | \ \ \
\/ )| |)| | | | | || (| | ) ) ) )
' |
| .__|| ||| |_, | / / / /
=========|
|==============|/=////
:: Spring Boot :: (v2.2.4.RELEASE)

2021-02-22 13:25:58.504 INFO 5696 --- [ main] ok.work.etoroapi.EtoroApiApplicationKt : Starting EtoroApiApplicationKt on DESKTOP-VS716JB with PID 5696 (C:\Users\KunsthandelMJvdS\Desktop\project M\project test\etoro-api-master\build\libs\etoro-api-0.1.3.jar started by KunsthandelMJvdS in C:\Users\KunsthandelMJvdS\Desktop\project M\project test\etoro-api-master)
2021-02-22 13:25:58.520 INFO 5696 --- [ main] ok.work.etoroapi.EtoroApiApplicationKt : No active profile set, falling back to default profiles: default
2021-02-22 13:26:00.270 INFO 5696 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8088 (http)
2021-02-22 13:26:00.286 INFO 5696 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2021-02-22 13:26:00.287 INFO 5696 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.30]
2021-02-22 13:26:00.393 INFO 5696 --- [ main] o.a.c.c.C.[.[localhost].[/etoro-api] : Initializing Spring embedded WebApplicationContext
2021-02-22 13:26:00.393 INFO 5696 --- [ main] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 1795 ms
Starting ChromeDriver 87.0.4280.88 (89e2380a3e36c3464b5dd1302349b1382549290d-refs/branch-heads/4280@{#1761}) on port 40168
Only local connections are allowed.
Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe.
ChromeDriver was started successfully.
[1613996762.219][WARNING]: This version of ChromeDriver has not been tested with Chrome version 88.
2021-02-22 13:26:04.291 INFO 5696 --- [ null to remote] o.o.selenium.remote.ProtocolHandshake : Detected dialect: W3C
2021-02-22 13:26:08.394 WARN 5696 --- [ main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'etoroMetadataService': Invocation of init method failed; nested exception is org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {"method":"css selector","selector":".w-login-btn-wrapp button"}
(Session info: chrome=88.0.4324.182)
For documentation on this error, please visit: https://www.seleniumhq.org/exceptions/no_such_element.html
Build info: version: 'unknown', revision: 'unknown', time: 'unknown'
System info: host: 'DESKTOP-VS716JB', ip: '192.168.2.8', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '11.0.10'
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities {acceptInsecureCerts: false, browserName: chrome, browserVersion: 88.0.4324.182, chrome: {chromedriverVersion: 87.0.4280.88 (89e2380a3e36c..., userDataDir: C:\Users\KUNSTH~2\AppData\L...}, goog:chromeOptions: {debuggerAddress: localhost:52805}, javascriptEnabled: true, networkConnectionEnabled: false, pageLoadStrategy: normal, platform: WINDOWS, platformName: WINDOWS, proxy: Proxy(), setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior: dismiss and notify, webauthn:virtualAuthenticators: true}
Session ID: c0785196770a5691c666a2adc20d3938
*** Element info: {Using=css selector, value=.w-login-btn-wrapp button}
2021-02-22 13:26:08.399 INFO 5696 --- [ main] o.apache.catalina.core.StandardService : Stopping service [Tomcat]
2021-02-22 13:26:08.415 INFO 5696 --- [ main] ConditionEvaluationReportLoggingListener :

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2021-02-22 13:26:08.423 ERROR 5696 --- [ main] o.s.boot.SpringApplication : Application run failed

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'etoroMetadataService': Invocation of init method failed; nested exception is org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {"method":"css selector","selector":".w-login-btn-wrapp button"}
(Session info: chrome=88.0.4324.182)
For documentation on this error, please visit: https://www.seleniumhq.org/exceptions/no_such_element.html
Build info: version: 'unknown', revision: 'unknown', time: 'unknown'
System info: host: 'DESKTOP-VS716JB', ip: '192.168.2.8', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '11.0.10'
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities {acceptInsecureCerts: false, browserName: chrome, browserVersion: 88.0.4324.182, chrome: {chromedriverVersion: 87.0.4280.88 (89e2380a3e36c..., userDataDir: C:\Users\KUNSTH~2\AppData\L...}, goog:chromeOptions: {debuggerAddress: localhost:52805}, javascriptEnabled: true, networkConnectionEnabled: false, pageLoadStrategy: normal, platform: WINDOWS, platformName: WINDOWS, proxy: Proxy(), setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior: dismiss and notify, webauthn:virtualAuthenticators: true}
Session ID: c0785196770a5691c666a2adc20d3938
*** Element info: {Using=css selector, value=.w-login-btn-wrapp button}
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:160) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:416) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1788) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:595) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:879) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:878) ~[spring-context-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550) ~[spring-context-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141) ~[spring-boot-2.2.4.RELEASE.jar!/:2.2.4.RELEASE]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747) ~[spring-boot-2.2.4.RELEASE.jar!/:2.2.4.RELEASE]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) ~[spring-boot-2.2.4.RELEASE.jar!/:2.2.4.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) ~[spring-boot-2.2.4.RELEASE.jar!/:2.2.4.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) ~[spring-boot-2.2.4.RELEASE.jar!/:2.2.4.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215) ~[spring-boot-2.2.4.RELEASE.jar!/:2.2.4.RELEASE]
at ok.work.etoroapi.EtoroApiApplicationKt.main(EtoroApiApplication.kt:52) ~[classes!/:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48) ~[etoro-api-0.1.3.jar:na]
at org.springframework.boot.loader.Launcher.launch(Launcher.java:87) ~[etoro-api-0.1.3.jar:na]
at org.springframework.boot.loader.Launcher.launch(Launcher.java:51) ~[etoro-api-0.1.3.jar:na]
at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:52) [etoro-api-0.1.3.jar:na]
Caused by: org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {"method":"css selector","selector":".w-login-btn-wrapp button"}
(Session info: chrome=88.0.4324.182)
For documentation on this error, please visit: https://www.seleniumhq.org/exceptions/no_such_element.html
Build info: version: 'unknown', revision: 'unknown', time: 'unknown'
System info: host: 'DESKTOP-VS716JB', ip: '192.168.2.8', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '11.0.10'
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities {acceptInsecureCerts: false, browserName: chrome, browserVersion: 88.0.4324.182, chrome: {chromedriverVersion: 87.0.4280.88 (89e2380a3e36c..., userDataDir: C:\Users\KUNSTH
2\AppData\L...}, goog:chromeOptions: {debuggerAddress: localhost:52805}, javascriptEnabled: true, networkConnectionEnabled: false, pageLoadStrategy: normal, platform: WINDOWS, platformName: WINDOWS, proxy: Proxy(), setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior: dismiss and notify, webauthn:virtualAuthenticators: true}
Session ID: c0785196770a5691c666a2adc20d3938
*** Element info: {Using=css selector, value=.w-login-btn-wrapp button}
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:na]
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490) ~[na:na]
at org.openqa.selenium.remote.http.W3CHttpResponseCodec.createException(W3CHttpResponseCodec.java:187) ~[selenium-remote-driver-3.141.59.jar!/:na]
at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:122) ~[selenium-remote-driver-3.141.59.jar!/:na]
at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:49) ~[selenium-remote-driver-3.141.59.jar!/:na]
at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:158) ~[selenium-remote-driver-3.141.59.jar!/:na]
at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:83) ~[selenium-remote-driver-3.141.59.jar!/:na]
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:552) ~[selenium-remote-driver-3.141.59.jar!/:na]
at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:323) ~[selenium-remote-driver-3.141.59.jar!/:na]
at org.openqa.selenium.remote.RemoteWebDriver.findElementByCssSelector(RemoteWebDriver.java:420) ~[selenium-remote-driver-3.141.59.jar!/:na]
at ok.work.etoroapi.client.browser.EtoroMetadataService.login(EtoroBrowserContext.kt:51) ~[classes!/:na]
at ok.work.etoroapi.client.browser.EtoroMetadataService.init(EtoroBrowserContext.kt:41) ~[classes!/:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:389) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:333) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:157) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
... 26 common frames omitted

A JSONObject text must begin with '{' at 1 [character 2 line 1]

Hey, when trying out the demo buy I'm getting the error A JSONObject text must begin with '{' at 1 [character 2 line 1]
Command is exactly like in the readme
curl -X POST \ http://localhost:8088/etoro-api/positions/open \ -H 'Content-Type: application/json' \ -H 'mode: Demo' \ -d '{ "name": "btc", "type": "BUY", "amount": 100, "leverage": 1, "takeProfitRate": 13000, "stopLossRate": 1000 }'

Any ideas? Running ubuntu 20.04
openjdk 11.0.9.1 2020-11-04
OpenJDK Runtime Environment (build 11.0.9.1+1-Ubuntu-0ubuntu1.20.04)
OpenJDK 64-Bit Server VM (build 11.0.9.1+1-Ubuntu-0ubuntu1.20.04, mixed mode, sharing)

Export positions as Yahoo Finance portfolio

I found out it's pretty easy to generate a csv file from my eToro positions and import it in Yahoo Finance.

The csv structure is pretty simple:

Column name Data from Note
Symbol EtoroAsset.SymbolFull To upper case
Trade Date EtoroPosition.OpenDateTime YYYYMMDD format
Purchase Price EtoroPosition.OpenRate
Quantity EtoroPosition.Amount / EtoroPosition.OpenRate Amount of shares
Comment Optional

I would send a PR, but I don't know the best way to add Symbol to EtoroPosition.
The response should probably have these headers:

Content-Type: text/csv
Content-Disposition: attachment;filename=portfolio.csv

Error with shorting (sell) positions

Whenever I try to create a short position it fails

Unfortunately I don't have the error now as the market is closed, however will try and get it on monday. I just want to confirm that the library supports shorts, as it looks as if it does.

Will confirm that buys went through completely fine, it was just an issue with 'sells' (and I don't mean closing an open position, mean a shot position).

Let me know if there is anything else I can provide you with

Ability to list copied positions?

I copy a bunch of people on eToro, and I'm trying to create a summary containing all my currently copied positions.

By inspecting the requests, I've figured out that all the data I need is included in the response from the logindata endpoint. Would it be possible to add an endpoint to expose this data?

In case anyone is interested, this is where the data about "Mirrors" can be found in the response from logindata:
List of Mirrors containing names and avatars: AggregatedResult.ApiResponses.MirrorsUserData.Content.users[]
Lists of copied positions: AggregatedResult.ApiResponses.PrivatePortfolio.Content.ClientPortfolio.Mirrors[].Positions

phantomjs://platform/console++.js:263 in error

[INFO  - 2020-05-15T23:57:24.425Z] Session [d2ba4750-9707-11ea-8f42-f7036ec18859] - page.settings - {"XSSAuditingEnabled":false,"javascriptCanCloseWindows":true,"javascriptCanOpenWindows":true,"javascriptEnabled":true,"loadImages":true,"localToRemoteUrlAccessEnabled":false,"userAgent":"Mozilla/5.0 (Macintosh; Intel Mac OS X) AppleWebKit/538.1 (KHTML, like Gecko) PhantomJS/2.1.1 Safari/538.1","webSecurityEnabled":true}
[INFO  - 2020-05-15T23:57:24.425Z] Session [d2ba4750-9707-11ea-8f42-f7036ec18859] - page.customHeaders:  - {}
[INFO  - 2020-05-15T23:57:24.425Z] Session [d2ba4750-9707-11ea-8f42-f7036ec18859] - Session.negotiatedCapabilities - {"browserName":"phantomjs","version":"2.1.1","driverName":"ghostdriver","driverVersion":"1.2.0","platform":"mac-unknown-64bit","javascriptEnabled":true,"takesScreenshot":true,"handlesAlerts":false,"databaseEnabled":false,"locationContextEnabled":false,"applicationCacheEnabled":false,"browserConnectionEnabled":false,"cssSelectorsEnabled":true,"webStorageEnabled":false,"rotatable":false,"acceptSslCerts":false,"nativeEvents":true,"proxy":{"proxyType":"direct"}}
[INFO  - 2020-05-15T23:57:24.425Z] SessionManagerReqHand - _postNewSessionCommand - New Session Created: d2ba4750-9707-11ea-8f42-f7036ec18859
2020-05-16 07:57:24.441  INFO 43398 --- [ null to remote] o.o.selenium.remote.ProtocolHandshake    : Detected dialect: OSS
[ERROR - 2020-05-15T23:57:42.125Z] Session [d2ba4750-9707-11ea-8f42-f7036ec18859] - page.onError - msg: TypeError: undefined is not an object (evaluating 'c.config')

  phantomjs://platform/console++.js:263 in error
[ERROR - 2020-05-15T23:57:42.125Z] Session [d2ba4750-9707-11ea-8f42-f7036ec18859] - page.onError - stack:
  (anonymous function) (https://cdn.etorostatic.com/235.0.1/js_require/?r[]=infrastruct/libs/requirejs/etoro-require&r[]=amd-config&r[]=apps/etoroApp&r[]=apps/components/layout/layout.view.html:2)
  (anonymous function) (https://cdn.etorostatic.com/235.0.1/js_require/?r[]=infrastruct/libs/requirejs/etoro-require&r[]=amd-config&r[]=apps/etoroApp&r[]=apps/components/layout/layout.view.html:2)

  phantomjs://platform/console++.js:263 in error

After waiting for many minutes, it seems working now. Should I just ignore this error message?

Split the project into a reusable client library and the current REST server

Right now, if I want to implement a client for your API, I have to implement a client for your REST API, i.e., model classes, mappings to JSON and the client class that performs the HTTP requests. While not hard, this is a very tedious task. I need to duplicate most of the code that is already in your project, e.g., EtoroHttpClient and EtoroPosition. I could probably reuse some of your code by depending on the Jar, but that would be very cumbersome, because your code relies on Spring's dependency injection. So I would need to use reflection to construct a EtoroHttpClient instance, e.g.

It would be very handy if you extracted your client into a separate project that could be used as a library and with code akin to:

val client = EtoroHttpClient()
client.login("username", "password")
val positions: List<EtoroPosition> = client.getPositions(TradingMode.REAL)

Your REST API project would then simply depend on that new client library, just as my code.

This client library (or at least parts of it) could even be a Kotlin multiplatform project, i.e. usable not only from JVM languages like Kotlin and Java, but also from JavaScript and other languages.

I would guess that extracting a JVM-only client would not be a lot of work for you. A multiplatform client might be a bit more challenging, but since I have some limited experience with that, I could offer my help.

Example from README issue

Hi, I couldn't get the example from the README to work.

curl -X PUT \ http://localhost:8088/etoro-api/watchlist/byId \ -H 'Content-Type: application/json' \ -H 'cache-control: no-cache' \ -d '{ "param": "btc" }'

Server returns:
{"timestamp":"2020-04-27T12:26:17.998+0000","status":500,"error":"Internal Server Error","message":"Asset with InstrumentID btc was not found.","path":"/etoro-api/watchlist/byId"}

Get the opening price of a position

Hi ! First of all congratulations, this is a fine piece of work!
I was wondering if when we open a position we can get the price at which it was opened in the response object. This is very useful because you almost never can open a position at the price you were "watching" it when you made the decision to buy.

Thanks in advance!

Error creating bean with name 'authorizationContext': Invocation of init method failed

like the problem posted in another thread, but the message is different.
I started the server with: java -jar build/libs/etoro-api-0.1.2.jar

This message was displayed before server shutdown:
[INFO - 2020-05-26T03:21:54.079Z] ShutdownReqHand - _handle - About to shutdown {"missingScopes":null,"gcid":0,"realCid":0,"demoCid":0,"accessToken":null,"antiCsrfToken":null,"expirationUnixTimeMs":0,"statusCode":"BadRequest","sessionIdentifier":0,"applicationIdentifier":null,"applicationId":0,"status":400,"error":{"failureReason":"PolicyViolation_TwoFactorRequired","errorMessage":"Two Factor Verification Required","verificationId":"1de991db-454d-4b68-bf09-99dac1c4c225","maskedPhone":"**********08","maskedEmail":null,"userSocialNetworkId":null,"socialAccessToken":null,"socialNetwork":null}}

EDIT:
it's because of my TwoFactorRequired,

cant open SELL position

First of all good job on the script!

I have been playing around with it for few days and I cant seem to open SELL position on some ETF's.
For example if I do it with bitcoin it works fine.

I tried

curl -X POST \
  http://localhost:8088/etoro-api/positions/open \
  -H 'Content-Type: application/json' \
  -H 'mode: Demo' \
  -d '{
	"name": "qqq",
	"type": "SELL",
	"amount": 2000,
	"leverage": 1
}'

and got the error
{"timestamp":"2020-07-20T17:15:03.605+0000","status":500,"error":"Internal Server Error","message":"Code: 796, details: null","path":"/etoro-api/positions/open"

If i use the same command but try BUY instead it works.
The only thing that comes to mind is that when "buying" QQQ is considered as ETF while when "selling" it is CFD.

Any idea ?

compileKotlin Error

Hello I have that when i tried to compile the project, could you help me please

  • What went wrong:
    Execution failed for task ':compileKotlin'.

Could not resolve all files for configuration ':compileClasspath'.
Could not resolve com.lightstreamer:ls-log-adapter-java:1.0.0.
Required by:
project : > com.lightstreamer:ls-javase-client:3.1.1
> Could not resolve com.lightstreamer:ls-log-adapter-java:1.0.0.
> Could not get resource 'https://www.lightstreamer.com/repo/maven/com/lightstreamer/ls-log-adapter-java/1.0.0/ls-log-adapter-java-1.0.0.pom'.
> Could not GET 'https://mvn.lightstreamer.com/com/lightstreamer/ls-log-adapter-java/1.0.0/ls-log-adapter-java-1.0.0.pom'. Received status code 403 from server: Forbidden

2 questions/issues

Firslty, amazing work.

So, onward with questions:

  • Does this scrape data already being sent by etoro or does it fetch data on its own every second or so?
  • Is there a way to get info about currently open positions?

This version of ChromeDriver only supports Chrome version 87

Hi,
I'm getting this error while starting on Ubuntu 20.04 and openjdk version "11.0.11" 2021-04-20.
Any hint?

. ____ _ __ _ _
/\ / ' __ _ () __ __ _ \ \ \
( ( )_
_ | '_ | '| | ' / ` | \ \ \
\/ )| |)| | | | | || (| | ) ) ) )
' |
| .__|| ||| |_, | / / / /
=========|
|==============|/=////
:: Spring Boot :: (v2.2.4.RELEASE)

2021-05-05 09:07:44.843 INFO 2406001 --- [ main] ok.work.etoroapi.EtoroApiApplicationKt : Starting EtoroApiApplicationKt on itmil-ves with PID 2406001 (/home/expovin/etoro-api/build/libs/etoro-api-0.1.4.jar started by expovin in /home/expovin/etoro-api)
2021-05-05 09:07:44.847 INFO 2406001 --- [ main] ok.work.etoroapi.EtoroApiApplicationKt : No active profile set, falling back to default profiles: default
2021-05-05 09:07:46.317 INFO 2406001 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8088 (http)
2021-05-05 09:07:46.333 INFO 2406001 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2021-05-05 09:07:46.334 INFO 2406001 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.30]
2021-05-05 09:07:46.408 INFO 2406001 --- [ main] o.a.c.c.C.[.[localhost].[/etoro-api] : Initializing Spring embedded WebApplicationContext
2021-05-05 09:07:46.408 INFO 2406001 --- [ main] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 1497 ms
Starting ChromeDriver 87.0.4280.88 (89e2380a3e36c3464b5dd1302349b1382549290d-refs/branch-heads/4280@{#1761}) on port 32480
Only local connections are allowed.
Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe.
ChromeDriver was started successfully.
2021-05-05 09:07:47.313 WARN 2406001 --- [ main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'watchlist': Unsatisfied dependency expressed through field 'etoroClient'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'etoroHttpClient': Unsatisfied dependency expressed through field 'userContext'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userContext': Unsatisfied dependency expressed through field 'metadataService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'etoroMetadataService': Invocation of init method failed; nested exception is org.openqa.selenium.SessionNotCreatedException: session not created: This version of ChromeDriver only supports Chrome version 87
Current browser version is 89.0.4389.114 with binary path /usr/bin/google-chrome
Build info: version: 'unknown', revision: 'unknown', time: 'unknown'
System info: host: 'itmil-ves', ip: '127.0.1.1', os.name: 'Linux', os.arch: 'amd64', os.version: '5.8.0-50-generic', java.version: '11.0.11'
Driver info: driver.version: ChromeDriver
remote stacktrace: #0 0x55f20e67ee79

2021-05-05 09:07:47.317 INFO 2406001 --- [ main] o.apache.catalina.core.StandardService : Stopping service [Tomcat]
2021-05-05 09:07:47.333 INFO 2406001 --- [ main] ConditionEvaluationReportLoggingListener :

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2021-05-05 09:07:47.340 ERROR 2406001 --- [ main] o.s.boot.SpringApplication : Application run failed

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'watchlist': Unsatisfied dependency expressed through field 'etoroClient'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'etoroHttpClient': Unsatisfied dependency expressed through field 'userContext'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userContext': Unsatisfied dependency expressed through field 'metadataService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'etoroMetadataService': Invocation of init method failed; nested exception is org.openqa.selenium.SessionNotCreatedException: session not created: This version of ChromeDriver only supports Chrome version 87
Current browser version is 89.0.4389.114 with binary path /usr/bin/google-chrome
Build info: version: 'unknown', revision: 'unknown', time: 'unknown'
System info: host: 'itmil-ves', ip: '127.0.1.1', os.name: 'Linux', os.arch: 'amd64', os.version: '5.8.0-50-generic', java.version: '11.0.11'
Driver info: driver.version: ChromeDriver
remote stacktrace: #0 0x55f20e67ee79

at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:643) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:116) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1422) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:594) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:879) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:878) ~[spring-context-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550) ~[spring-context-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141) ~[spring-boot-2.2.4.RELEASE.jar!/:2.2.4.RELEASE]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747) ~[spring-boot-2.2.4.RELEASE.jar!/:2.2.4.RELEASE]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) ~[spring-boot-2.2.4.RELEASE.jar!/:2.2.4.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) ~[spring-boot-2.2.4.RELEASE.jar!/:2.2.4.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) ~[spring-boot-2.2.4.RELEASE.jar!/:2.2.4.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215) ~[spring-boot-2.2.4.RELEASE.jar!/:2.2.4.RELEASE]
at ok.work.etoroapi.EtoroApiApplicationKt.main(EtoroApiApplication.kt:54) ~[classes!/:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48) ~[etoro-api-0.1.4.jar:na]
at org.springframework.boot.loader.Launcher.launch(Launcher.java:87) ~[etoro-api-0.1.4.jar:na]
at org.springframework.boot.loader.Launcher.launch(Launcher.java:51) ~[etoro-api-0.1.4.jar:na]
at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:52) ~[etoro-api-0.1.4.jar:na]

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'etoroHttpClient': Unsatisfied dependency expressed through field 'userContext'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userContext': Unsatisfied dependency expressed through field 'metadataService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'etoroMetadataService': Invocation of init method failed; nested exception is org.openqa.selenium.SessionNotCreatedException: session not created: This version of ChromeDriver only supports Chrome version 87
Current browser version is 89.0.4389.114 with binary path /usr/bin/google-chrome
Build info: version: 'unknown', revision: 'unknown', time: 'unknown'
System info: host: 'itmil-ves', ip: '127.0.1.1', os.name: 'Linux', os.arch: 'amd64', os.version: '5.8.0-50-generic', java.version: '11.0.11'
Driver info: driver.version: ChromeDriver
remote stacktrace: #0 0x55f20e67ee79

at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:643) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:116) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1422) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:594) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1287) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1207) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
... 27 common frames omitted

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userContext': Unsatisfied dependency expressed through field 'metadataService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'etoroMetadataService': Invocation of init method failed; nested exception is org.openqa.selenium.SessionNotCreatedException: session not created: This version of ChromeDriver only supports Chrome version 87
Current browser version is 89.0.4389.114 with binary path /usr/bin/google-chrome
Build info: version: 'unknown', revision: 'unknown', time: 'unknown'
System info: host: 'itmil-ves', ip: '127.0.1.1', os.name: 'Linux', os.arch: 'amd64', os.version: '5.8.0-50-generic', java.version: '11.0.11'
Driver info: driver.version: ChromeDriver
remote stacktrace: #0 0x55f20e67ee79

at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:643) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:116) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1422) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:594) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1287) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1207) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
... 40 common frames omitted

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'etoroMetadataService': Invocation of init method failed; nested exception is org.openqa.selenium.SessionNotCreatedException: session not created: This version of ChromeDriver only supports Chrome version 87
Current browser version is 89.0.4389.114 with binary path /usr/bin/google-chrome
Build info: version: 'unknown', revision: 'unknown', time: 'unknown'
System info: host: 'itmil-ves', ip: '127.0.1.1', os.name: 'Linux', os.arch: 'amd64', os.version: '5.8.0-50-generic', java.version: '11.0.11'
Driver info: driver.version: ChromeDriver
remote stacktrace: #0 0x55f20e67ee79

at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:160) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:416) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1788) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:595) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1287) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1207) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
... 53 common frames omitted

Caused by: org.openqa.selenium.SessionNotCreatedException: session not created: This version of ChromeDriver only supports Chrome version 87
Current browser version is 89.0.4389.114 with binary path /usr/bin/google-chrome
Build info: version: 'unknown', revision: 'unknown', time: 'unknown'
System info: host: 'itmil-ves', ip: '127.0.1.1', os.name: 'Linux', os.arch: 'amd64', os.version: '5.8.0-50-generic', java.version: '11.0.11'
Driver info: driver.version: ChromeDriver
remote stacktrace: #0 0x55f20e67ee79

at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:na]
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490) ~[na:na]
at org.openqa.selenium.remote.W3CHandshakeResponse.lambda$errorHandler$0(W3CHandshakeResponse.java:62) ~[selenium-remote-driver-3.141.59.jar!/:na]
at org.openqa.selenium.remote.HandshakeResponse.lambda$getResponseFunction$0(HandshakeResponse.java:30) ~[selenium-remote-driver-3.141.59.jar!/:na]
at org.openqa.selenium.remote.ProtocolHandshake.lambda$createSession$0(ProtocolHandshake.java:126) ~[selenium-remote-driver-3.141.59.jar!/:na]
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195) ~[na:na]
at java.base/java.util.Spliterators$ArraySpliterator.tryAdvance(Spliterators.java:958) ~[na:na]
at java.base/java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:127) ~[na:na]
at java.base/java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:502) ~[na:na]
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:488) ~[na:na]
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) ~[na:na]
at java.base/java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:150) ~[na:na]
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:na]
at java.base/java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:543) ~[na:na]
at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:128) ~[selenium-remote-driver-3.141.59.jar!/:na]
at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:74) ~[selenium-remote-driver-3.141.59.jar!/:na]
at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:136) ~[selenium-remote-driver-3.141.59.jar!/:na]
at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:83) ~[selenium-remote-driver-3.141.59.jar!/:na]
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:552) ~[selenium-remote-driver-3.141.59.jar!/:na]
at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:213) ~[selenium-remote-driver-3.141.59.jar!/:na]
at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:131) ~[selenium-remote-driver-3.141.59.jar!/:na]
at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:181) ~[selenium-chrome-driver-3.141.59.jar!/:na]
at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:168) ~[selenium-chrome-driver-3.141.59.jar!/:na]
at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:157) ~[selenium-chrome-driver-3.141.59.jar!/:na]
at ok.work.etoroapi.client.browser.EtoroMetadataService.login(EtoroBrowserContext.kt:46) ~[classes!/:na]
at ok.work.etoroapi.client.browser.EtoroMetadataService.init(EtoroBrowserContext.kt:42) ~[classes!/:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:389) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:333) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:157) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE]
... 65 common frames omitted

[New feature needed]: Can we change the enpoint?

Firstly, a very nice project!

In my area, the request (by the browser directly) etoro.com will be directed to etorocn.com.cn. So far, it seems that the backend database is the same. Is it possible to add an option to reset the endpoint? In your code, I tried to replace some of the URLs, but not pretty sure if this is work or not (seems work!). Also, I do not know what is ...push-demo-lightstreamer.cloud.etoro....

Anyway, if you can leave me an "official" place to replace it, that would be good.

Not able to open position

Hi,

I am new to this piece of software, but I am trying to open a new position on Demo mode. I have followed the tutorial on the README, but I'm getting an error when trying to open any position.

My watchlist is as follows:

[{"id":"28","name":"nsdq100","fullName":"NASDAQ100","buy":null,"sell":null,"marketOpen":null,"askDiscounted":0.0,"bidDiscounted":0.0},{"id":"100000","name":"btc","fullName":"Bitcoin","buy":null,"sell":null,"marketOpen":null,"askDiscounted":0.0,"bidDiscounted":0.0},{"id":"18","name":"gold","fullName":"Gold","buy":null,"sell":null,"marketOpen":null,"askDiscounted":0.0,"bidDiscounted":0.0}]

however, when I try to open a NSDQ100 position via:

curl -X POST \
  http://localhost:8088/etoro-api/positions/open \
  -H 'Content-Type: application/json' \
  -H 'mode: Demo' \
  -d '{
	"name": "nsdq100",
	"type": "BUY",
	"amount": 200,
	"leverage": 20
}'

I get the following error:

{"timestamp":1653989576442,"status":500,"error":"Internal Server Error","message":"None BUY price available for id 28","path":"/etoro-api/positions/open"}

Would anyone know what I am doing wrong? Thanks.

chrome update tot v89

i noticed that there is an error with the newly released google chrome V89 (released march 9) it broke spring for me, even after getting a v89 compatable chrome driver
anyone know if there is a fix here? or just downgrade the chrome browser?
best regards,
Max.

. ____ _ __ _ _ /\ / ' __ _ () __ __ _ \ \ \ \ ( ( )__ | '_ | '| | ' / ` | \ \ \ \ \/ )| |)| | | | | || (| | ) ) ) ) ' || .__|| ||| |_, | / / / / =========||==============|/=//// :: Spring Boot :: (v2.2.4.RELEASE) 2021-03-15 10:33:55.373 INFO 6412 --- [ main] ok.work.etoroapi.EtoroApiApplicationKt : Starting EtoroApiApplicationKt on DESKTOP-VS716JB with PID 6412 (C:\Users\KunsthandelMJvdS\Desktop\project M\project test\etoro-api-master\build\libs\etoro-api-0.1.4.jar started by KunsthandelMJvdS in C:\Users\KunsthandelMJvdS\Desktop\project M\project test\etoro-api-master) 2021-03-15 10:33:55.373 INFO 6412 --- [ main] ok.work.etoroapi.EtoroApiApplicationKt : No active profile set, falling back to default profiles: default 2021-03-15 10:33:57.116 INFO 6412 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8088 (http) 2021-03-15 10:33:57.132 INFO 6412 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat] 2021-03-15 10:33:57.132 INFO 6412 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.30] 2021-03-15 10:33:57.251 INFO 6412 --- [ main] o.a.c.c.C.[.[localhost].[/etoro-api] : Initializing Spring embedded WebApplicationContext 2021-03-15 10:33:57.251 INFO 6412 --- [ main] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 1815 ms Starting ChromeDriver 87.0.4280.88 (89e2380a3e36c3464b5dd1302349b1382549290d-refs/branch-heads/4280@{#1761}) on port 2895 Only local connections are allowed. Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe. ChromeDriver was started successfully. 2021-03-15 10:33:59.197 WARN 6412 --- [ main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'etoroMetadataService': Invocation of init method failed; nested exception is org.openqa.selenium.SessionNotCreatedException: session not created: This version of ChromeDriver only supports Chrome version 87 Current browser version is 89.0.4389.82 with binary path C:\Program Files (x86)\Google\Chrome\Application\chrome.exe Build info: version: 'unknown', revision: 'unknown', time: 'unknown' System info: host: 'DESKTOP-VS716JB', ip: '192.168.2.8', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '11.0.10' Driver info: driver.version: ChromeDriver remote stacktrace: Backtrace: Ordinal0 [0x00A1C0C3+3326147] Ordinal0 [0x00900851+2164817] Ordinal0 [0x00787298+619160] Ordinal0 [0x00701D92+73106] Ordinal0 [0x006FE119+57625] Ordinal0 [0x006FC38A+50058] Ordinal0 [0x00725F3E+220990] Ordinal0 [0x00725CAC+220332] Ordinal0 [0x0072189B+202907] Ordinal0 [0x00703DF4+81396] Ordinal0 [0x00704DEE+85486] Ordinal0 [0x00704D79+85369] Ordinal0 [0x009185DC+2262492] GetHandleVerifier [0x00BA2874+1487204] GetHandleVerifier [0x00BA23CD+1486013] GetHandleVerifier [0x00BAA368+1518680] GetHandleVerifier [0x00BA2F4E+1488958] Ordinal0 [0x0090ED0D+2223373] Ordinal0 [0x0091A12B+2269483] Ordinal0 [0x0091A26F+2269807] Ordinal0 [0x0092ECB8+2354360] BaseThreadInitThunk [0x7738FA29+25] RtlGetAppContainerNamedObjectPath [0x776E76B4+228] RtlGetAppContainerNamedObjectPath [0x776E7684+180] 2021-03-15 10:33:59.212 INFO 6412 --- [ main] o.apache.catalina.core.StandardService : Stopping service [Tomcat] 2021-03-15 10:33:59.244 INFO 6412 --- [ main] ConditionEvaluationReportLoggingListener : Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. 2021-03-15 10:33:59.262 ERROR 6412 --- [ main] o.s.boot.SpringApplication : Application run failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'etoroMetadataService': Invocation of init method failed; nested exception is org.openqa.selenium.SessionNotCreatedException: session not created: This version of ChromeDriver only supports Chrome version 87 Current browser version is 89.0.4389.82 with binary path C:\Program Files (x86)\Google\Chrome\Application\chrome.exe Build info: version: 'unknown', revision: 'unknown', time: 'unknown' System info: host: 'DESKTOP-VS716JB', ip: '192.168.2.8', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '11.0.10' Driver info: driver.version: ChromeDriver remote stacktrace: Backtrace: Ordinal0 [0x00A1C0C3+3326147] Ordinal0 [0x00900851+2164817] Ordinal0 [0x00787298+619160] Ordinal0 [0x00701D92+73106] Ordinal0 [0x006FE119+57625] Ordinal0 [0x006FC38A+50058] Ordinal0 [0x00725F3E+220990] Ordinal0 [0x00725CAC+220332] Ordinal0 [0x0072189B+202907] Ordinal0 [0x00703DF4+81396] Ordinal0 [0x00704DEE+85486] Ordinal0 [0x00704D79+85369] Ordinal0 [0x009185DC+2262492] GetHandleVerifier [0x00BA2874+1487204] GetHandleVerifier [0x00BA23CD+1486013] GetHandleVerifier [0x00BAA368+1518680] GetHandleVerifier [0x00BA2F4E+1488958] Ordinal0 [0x0090ED0D+2223373] Ordinal0 [0x0091A12B+2269483] Ordinal0 [0x0091A26F+2269807] Ordinal0 [0x0092ECB8+2354360] BaseThreadInitThunk [0x7738FA29+25] RtlGetAppContainerNamedObjectPath [0x776E76B4+228] RtlGetAppContainerNamedObjectPath [0x776E7684+180] at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:160) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:416) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1788) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:595) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE] at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:879) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:878) ~[spring-context-5.2.3.RELEASE.jar!/:5.2.3.RELEASE] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550) ~[spring-context-5.2.3.RELEASE.jar!/:5.2.3.RELEASE] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141) ~[spring-boot-2.2.4.RELEASE.jar!/:2.2.4.RELEASE] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747) ~[spring-boot-2.2.4.RELEASE.jar!/:2.2.4.RELEASE] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) ~[spring-boot-2.2.4.RELEASE.jar!/:2.2.4.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) ~[spring-boot-2.2.4.RELEASE.jar!/:2.2.4.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) ~[spring-boot-2.2.4.RELEASE.jar!/:2.2.4.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215) ~[spring-boot-2.2.4.RELEASE.jar!/:2.2.4.RELEASE] at ok.work.etoroapi.EtoroApiApplicationKt.main(EtoroApiApplication.kt:54) ~[classes!/:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48) ~[etoro-api-0.1.4.jar:na] at org.springframework.boot.loader.Launcher.launch(Launcher.java:87) ~[etoro-api-0.1.4.jar:na] at org.springframework.boot.loader.Launcher.launch(Launcher.java:51) ~[etoro-api-0.1.4.jar:na] at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:52) ~[etoro-api-0.1.4.jar:na] Caused by: org.openqa.selenium.SessionNotCreatedException: session not created: This version of ChromeDriver only supports Chrome version 87 Current browser version is 89.0.4389.82 with binary path C:\Program Files (x86)\Google\Chrome\Application\chrome.exe Build info: version: 'unknown', revision: 'unknown', time: 'unknown' System info: host: 'DESKTOP-VS716JB', ip: '192.168.2.8', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '11.0.10' Driver info: driver.version: ChromeDriver remote stacktrace: Backtrace: Ordinal0 [0x00A1C0C3+3326147] Ordinal0 [0x00900851+2164817] Ordinal0 [0x00787298+619160] Ordinal0 [0x00701D92+73106] Ordinal0 [0x006FE119+57625] Ordinal0 [0x006FC38A+50058] Ordinal0 [0x00725F3E+220990] Ordinal0 [0x00725CAC+220332] Ordinal0 [0x0072189B+202907] Ordinal0 [0x00703DF4+81396] Ordinal0 [0x00704DEE+85486] Ordinal0 [0x00704D79+85369] Ordinal0 [0x009185DC+2262492] GetHandleVerifier [0x00BA2874+1487204] GetHandleVerifier [0x00BA23CD+1486013] GetHandleVerifier [0x00BAA368+1518680] GetHandleVerifier [0x00BA2F4E+1488958] Ordinal0 [0x0090ED0D+2223373] Ordinal0 [0x0091A12B+2269483] Ordinal0 [0x0091A26F+2269807] Ordinal0 [0x0092ECB8+2354360] BaseThreadInitThunk [0x7738FA29+25] RtlGetAppContainerNamedObjectPath [0x776E76B4+228] RtlGetAppContainerNamedObjectPath [0x776E7684+180] at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:na] at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:na] at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490) ~[na:na] at org.openqa.selenium.remote.W3CHandshakeResponse.lambda$errorHandler$0(W3CHandshakeResponse.java:62) ~[selenium-remote-driver-3.141.59.jar!/:na] at org.openqa.selenium.remote.HandshakeResponse.lambda$getResponseFunction$0(HandshakeResponse.java:30) ~[selenium-remote-driver-3.141.59.jar!/:na] at org.openqa.selenium.remote.ProtocolHandshake.lambda$createSession$0(ProtocolHandshake.java:126) ~[selenium-remote-driver-3.141.59.jar!/:na] at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195) ~[na:na] at java.base/java.util.Spliterators$ArraySpliterator.tryAdvance(Spliterators.java:958) ~[na:na] at java.base/java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:127) ~[na:na] at java.base/java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:502) ~[na:na] at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:488) ~[na:na] at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) ~[na:na] at java.base/java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:150) ~[na:na] at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:na] at java.base/java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:543) ~[na:na] at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:128) ~[selenium-remote-driver-3.141.59.jar!/:na] at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:74) ~[selenium-remote-driver-3.141.59.jar!/:na] at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:136) ~[selenium-remote-driver-3.141.59.jar!/:na] at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:83) ~[selenium-remote-driver-3.141.59.jar!/:na] at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:552) ~[selenium-remote-driver-3.141.59.jar!/:na] at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:213) ~[selenium-remote-driver-3.141.59.jar!/:na] at org.openqa.selenium.remote.RemoteWebDriver.(RemoteWebDriver.java:131) ~[selenium-remote-driver-3.141.59.jar!/:na] at org.openqa.selenium.chrome.ChromeDriver.(ChromeDriver.java:181) ~[selenium-chrome-driver-3.141.59.jar!/:na] at org.openqa.selenium.chrome.ChromeDriver.(ChromeDriver.java:168) ~[selenium-chrome-driver-3.141.59.jar!/:na] at org.openqa.selenium.chrome.ChromeDriver.(ChromeDriver.java:157) ~[selenium-chrome-driver-3.141.59.jar!/:na] at ok.work.etoroapi.client.browser.EtoroMetadataService.login(EtoroBrowserContext.kt:46) ~[classes!/:na] at ok.work.etoroapi.client.browser.EtoroMetadataService.init(EtoroBrowserContext.kt:42) ~[classes!/:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:389) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE] at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:333) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE] at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:157) ~[spring-beans-5.2.3.RELEASE.jar!/:5.2.3.RELEASE] ... 26 common frames omitted

Request for the documentation of the eToro API

Hi @ok24601

I appreciate the hard work that you have done!

I have a question, did you follow any official API provided by eToro or you reverse-engineer the behavior of it?

I'd like to learn about any official API provided by eToro if there's any.

Thank you

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.