Skip to content

Commit b6b08a2

Browse files
committed
fix cannot login
1 parent 9ad95e1 commit b6b08a2

File tree

5 files changed

+115
-25
lines changed

5 files changed

+115
-25
lines changed

TbsCore/Core/TaskExecutor.cs

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ public static async Task<bool> PageLoaded(Account acc)
4141
await Task.Delay(5000);
4242
}
4343
}
44+
4445
if (IsCaptcha(acc) || IsWWMsg(acc) || IsBanMsg(acc) || IsMaintanance(acc)) //Check if a captcha/ban/end of server/maintanance
4546
{
4647
acc.Logger.Warning("Captcha/WW/Ban/Maintanance found! Stopping bot for this account!");
@@ -312,15 +313,33 @@ private static bool CheckCookiesNew(Account acc) =>
312313
//will be called before executing PreTaskRefresh
313314
internal static bool IsLoginScreen(Account acc)
314315
{
315-
var outerLoginBox = acc.Wb.Html.DocumentNode
316-
.Descendants("form")
317-
.FirstOrDefault(x => x.GetAttributeValue("name", "") == "login");
318-
319-
if (outerLoginBox != null)
316+
switch (acc.AccInfo.ServerVersion)
320317
{
321-
if (!IsCaptcha(acc)) return true;
318+
case Classificator.ServerVersionEnum.TTwars:
319+
{
320+
var outerLoginBox = acc.Wb.Html.DocumentNode
321+
.Descendants("form")
322+
.FirstOrDefault(x => x.GetAttributeValue("name", "") == "login");
323+
324+
if (outerLoginBox != null)
325+
{
326+
if (!IsCaptcha(acc)) return true;
327+
}
328+
return false;
329+
}
330+
case Classificator.ServerVersionEnum.T4_5:
331+
{
332+
var tableLogin = acc.Wb.Html.GetElementbyId("loginForm");
333+
334+
if (tableLogin != null)
335+
{
336+
if (!IsCaptcha(acc)) return true;
337+
}
338+
return false;
339+
}
340+
default:
341+
return false;
322342
}
323-
return false;
324343
}
325344

326345
private static bool IsSysMsg(Account acc)

TbsCore/Tasks/LowLevel/GetServerInfo.cs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,6 @@ public override async Task<TaskRes> Execute(Account acc)
1919
acc.AccInfo.ServerSpeed = (int)speed;
2020
acc.Logger.Information($"Server speed is {acc.AccInfo.ServerSpeed}");
2121

22-
// Get server version
23-
acc.AccInfo.ServerVersion = (acc.Wb.Html.GetElementbyId("sidebarBoxDailyquests") == null ? Classificator.ServerVersionEnum.T4_5 : Classificator.ServerVersionEnum.TTwars);
24-
acc.Logger.Information($"Server version is {acc.AccInfo.ServerVersion}");
25-
2622
return TaskRes.Executed;
2723
}
2824
}

TbsCore/Tasks/LowLevel/LoginTask.cs

Lines changed: 87 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
using System.Threading.Tasks;
1+
using HtmlAgilityPack;
2+
using OpenQA.Selenium;
3+
using System.Linq;
4+
using System.Threading.Tasks;
25
using TbsCore.Helpers;
36
using TbsCore.Models.AccModels;
47

@@ -8,26 +11,48 @@ public class LoginTask : BotTask
811
{
912
public override async Task<TaskRes> Execute(Account acc)
1013
{
11-
if (!TaskExecutor.IsLoginScreen(acc))
14+
var usernameNode = GetUsernameNode(acc);
15+
if (usernameNode == null)
1216
{
13-
await Task.Delay(AccountHelper.Delay(acc) * 2);
14-
return TaskRes.Executed;
17+
acc.Logger.Warning("Cannot find username box");
18+
acc.TaskTimer.Stop();
19+
acc.Status = Status.Paused;
20+
return TaskRes.Retry;
1521
}
1622

17-
var access = acc.Access.GetCurrentAccess();
18-
19-
if (acc.AccInfo.ServerUrl.Contains("ttwars"))
23+
var passwordNode = GetPasswordNode(acc);
24+
if (passwordNode == null)
2025
{
21-
await DriverHelper.WriteByName(acc, "user", acc.AccInfo.Nickname);
22-
await DriverHelper.WriteByName(acc, "pw", access.Password);
26+
acc.Logger.Warning("Cannot find password box");
27+
acc.TaskTimer.Stop();
28+
acc.Status = Status.Paused;
29+
return TaskRes.Retry;
2330
}
24-
else
31+
32+
var buttonNode = GetLoginButton(acc);
33+
if (buttonNode == null)
2534
{
26-
await DriverHelper.WriteByName(acc, "name", acc.AccInfo.Nickname);
27-
await DriverHelper.WriteByName(acc, "password", access.Password);
35+
acc.Logger.Warning("Cannot find login button");
36+
acc.TaskTimer.Stop();
37+
acc.Status = Status.Paused;
38+
return TaskRes.Retry;
2839
}
2940

30-
await DriverHelper.ClickByName(acc, "s1");
41+
var access = acc.Access.GetCurrentAccess();
42+
43+
var usernameElement = acc.Wb.Driver.FindElement(By.XPath(usernameNode.XPath));
44+
45+
usernameElement.SendKeys(Keys.Home);
46+
usernameElement.SendKeys(Keys.Shift + Keys.End);
47+
usernameElement.SendKeys(acc.AccInfo.Nickname);
48+
49+
var passwordElement = acc.Wb.Driver.FindElement(By.XPath(passwordNode.XPath));
50+
passwordElement.SendKeys(Keys.Home);
51+
passwordElement.SendKeys(Keys.Shift + Keys.End);
52+
passwordElement.SendKeys(access.Password);
53+
54+
var buttonElement = acc.Wb.Driver.FindElement(By.XPath(buttonNode.XPath));
55+
buttonElement.Click();
3156

3257
acc.Wb.UpdateHtml();
3358

@@ -36,6 +61,7 @@ public override async Task<TaskRes> Execute(Account acc)
3661
// Wrong password/nickname
3762
acc.Logger.Warning("Password is incorrect!");
3863
acc.TaskTimer.Stop();
64+
acc.Status = Status.Paused;
3965
return TaskRes.Retry;
4066
}
4167
else
@@ -48,5 +74,53 @@ public override async Task<TaskRes> Execute(Account acc)
4874
return TaskRes.Executed;
4975
}
5076
}
77+
78+
private HtmlNode GetUsernameNode(Account acc)
79+
{
80+
switch (acc.AccInfo.ServerVersion)
81+
{
82+
case Classificator.ServerVersionEnum.TTwars:
83+
return acc.Wb.Html.DocumentNode.Descendants("input").FirstOrDefault(x => x.GetAttributeValue("name", "").Equals("user"));
84+
85+
case Classificator.ServerVersionEnum.T4_5:
86+
return acc.Wb.Html.DocumentNode.Descendants("input").FirstOrDefault(x => x.GetAttributeValue("name", "").Equals("name"));
87+
88+
default:
89+
return null;
90+
};
91+
}
92+
93+
private HtmlNode GetPasswordNode(Account acc)
94+
{
95+
switch (acc.AccInfo.ServerVersion)
96+
{
97+
case Classificator.ServerVersionEnum.TTwars:
98+
return acc.Wb.Html.DocumentNode.Descendants("input").FirstOrDefault(x => x.GetAttributeValue("name", "").Equals("pw"));
99+
100+
case Classificator.ServerVersionEnum.T4_5:
101+
return acc.Wb.Html.DocumentNode.Descendants("input").FirstOrDefault(x => x.GetAttributeValue("name", "").Equals("password"));
102+
103+
default:
104+
return null;
105+
};
106+
}
107+
108+
private HtmlNode GetLoginButton(Account acc)
109+
{
110+
switch (acc.AccInfo.ServerVersion)
111+
{
112+
case Classificator.ServerVersionEnum.TTwars:
113+
return acc.Wb.Html.GetElementbyId("s1");
114+
115+
case Classificator.ServerVersionEnum.T4_5:
116+
{
117+
var trNode = acc.Wb.Html.DocumentNode.Descendants("tr").FirstOrDefault(x => x.HasClass("loginButtonRow"));
118+
if (trNode == null) return null;
119+
return trNode.Descendants("button").FirstOrDefault(x => x.HasClass("green"));
120+
}
121+
default:
122+
return null;
123+
};
124+
}
51125
}
52126
}

TravBotSharp/Forms/AddAccount.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,7 @@ private void button4_Click(object sender, EventArgs e)
163163
{
164164
this.DialogResult = DialogResult.OK;
165165
IoHelperCore.CreateUserData(Acc.AccInfo.Nickname, IoHelperCore.UrlRemoveHttp(Acc.AccInfo.ServerUrl));
166+
Acc.AccInfo.ServerVersion = Acc.AccInfo.ServerUrl.Contains("ttwars.com") ? Classificator.ServerVersionEnum.TTwars : Classificator.ServerVersionEnum.T4_5;
166167

167168
this.Close();
168169
}

TravBotSharp/Forms/AddAccounts.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@ private void richTextBox1_TextChanged(object sender, EventArgs e)
4343
if (!string.IsNullOrEmpty(account.Proxy.ProxyUsername))
4444
{
4545
richTextBox2.AppendText($"[{account.Server}] [{account.Username}] [{account.Proxy.Password}] [{account.Proxy.Proxy}] [{account.Proxy.ProxyPort}] [{account.Proxy.ProxyUsername}] [{account.Proxy.ProxyPassword}]\n");
46-
4746
}
4847
else
4948
{
@@ -142,6 +141,7 @@ public List<Account> GetAccounts()
142141
acc.AccInfo.Nickname = item.Username;
143142
acc.Access.AddNewAccess(item.Proxy);
144143
IoHelperCore.CreateUserData(acc.AccInfo.Nickname, IoHelperCore.UrlRemoveHttp(acc.AccInfo.ServerUrl));
144+
acc.AccInfo.ServerVersion = acc.AccInfo.ServerUrl.Contains("ttwars.com") ? Classificator.ServerVersionEnum.TTwars : Classificator.ServerVersionEnum.T4_5;
145145

146146
result.Add(acc);
147147
}

0 commit comments

Comments
 (0)