Commit 703a941d authored by 黄奎's avatar 黄奎

页面修改

parent eba90070
......@@ -54,60 +54,5 @@ namespace EduSpider
Console.ReadLine();
Environment.Exit(0);
}
#region 异常 退出chromedriver
[DllImport("user32.dll", EntryPoint = "FindWindow")]
private extern static IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll", EntryPoint = "SendMessage")]
public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
public const int SW_HIDE = 0;
public const int SW_SHOW = 5;
[DllImport("user32.dll", EntryPoint = "ShowWindow")]
public static extern int ShowWindow(IntPtr hwnd, int nCmdShow);
/// <summary>
/// 获取窗口句柄
/// </summary>
/// <returns></returns>
public IntPtr GetWindowHandle()
{
string name = (Environment.CurrentDirectory + "\\chromedriver.exe");
IntPtr hwd = FindWindow(null, name);
return hwd;
}
/// <summary>
/// 关闭chromedriver窗口
/// </summary>
public void CloseWindow()
{
try
{
IntPtr hwd = GetWindowHandle();
SendMessage(hwd, 0x10, 0, 0);
}
catch
{
}
}
/// <summary>
/// 退出chromedriver
/// </summary>
/// <param name="driver"></param>
public void CloseChromeDriver(IWebDriver driver)
{
try
{
driver.Quit();
driver.Dispose();
}
catch
{
}
CloseWindow();
}
#endregion 异常 退出chromedriver
}
}
\ No newline at end of file
......@@ -10,6 +10,7 @@ using System.Drawing;
using System.IO;
using System.Net;
using System.Net.Http;
using System.Runtime.InteropServices;
using System.Threading;
using System.Threading.Tasks;
......@@ -72,7 +73,7 @@ namespace TicketSpider.Spiders.ClassInRule
IWebElement pwdEle;
var option = new FirefoxOptions();
option.AddArgument("--incognito");
string IsOpenChrome= VTX.FW.Helper.ConfigHelper.GetAppsettings("IsOpenChrome");
string IsOpenChrome = VTX.FW.Helper.ConfigHelper.GetAppsettings("IsOpenChrome");
if (IsOpenChrome == "1")
{
option.AddArgument("window-size=1920,1080");
......@@ -90,104 +91,158 @@ namespace TicketSpider.Spiders.ClassInRule
option.AddArgument("--headless");
option.AddArgument("--disable-infobars");
option.AddArgument("window-size=1920*1080");
// option.AddArgument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:104.0) Gecko/20100101 Firefox/104.0");
// option.AddArgument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:104.0) Gecko/20100101 Firefox/104.0");
option.PageLoadStrategy = PageLoadStrategy.Eager;
FirefoxDriverService service = FirefoxDriverService.CreateDefaultService(Environment.CurrentDirectory);
service.HideCommandPromptWindow = true;
IWebDriver driver = new FirefoxDriver(service,option);
VTX.FW.Helper.LogHelper.WriteInfo("RunAsync", "开始登录");
try
using (IWebDriver driver = new FirefoxDriver(service, option))
{
driver.Navigate().GoToUrl($"https://www.eeo.cn/cn/login");
ITimeouts timeouts = driver.Manage().Timeouts();
//设置查找元素最大超时时间为30秒
timeouts.ImplicitWait = new TimeSpan(0, 0, 30);
//设置页面操作最大超时时间为30秒
timeouts.PageLoad = new TimeSpan(0, 0, 30);
//设置脚本异步最大超时时间为30秒
timeouts.AsynchronousJavaScript = new TimeSpan(0, 0, 30);
//等待页面元素加载完成
//默认等待100秒
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(100));
//等待页面上按钮加载
inputEle = wait.Until((d) =>
{
return d.FindElement(By.Name("phoneNum"));
});
pwdEle = wait.Until((d) =>
VTX.FW.Helper.LogHelper.WriteInfo("RunAsync", "开始登录");
try
{
return d.FindElement(By.Name("loginPwd"));
});
if (inputEle != null && pwdEle != null)
{
inputEle.SendKeys("18140082327");
pwdEle.SendKeys("ls123456");
var loginCount = 0;
var buttonEle = driver.FindElement(By.CssSelector(".submit-btn"));
Thread.Sleep(1000);
//开始登录
buttonEle.Click();
//开始模拟登录
while (true)
driver.Navigate().GoToUrl($"https://www.eeo.cn/cn/login");
ITimeouts timeouts = driver.Manage().Timeouts();
//设置查找元素最大超时时间为30秒
timeouts.ImplicitWait = new TimeSpan(0, 0, 30);
//设置页面操作最大超时时间为30秒
timeouts.PageLoad = new TimeSpan(0, 0, 30);
//设置脚本异步最大超时时间为30秒
timeouts.AsynchronousJavaScript = new TimeSpan(0, 0, 30);
//等待页面元素加载完成
//默认等待100秒
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(100));
//等待页面上按钮加载
inputEle = wait.Until((d) =>
{
return d.FindElement(By.Name("phoneNum"));
});
pwdEle = wait.Until((d) =>
{
return d.FindElement(By.Name("loginPwd"));
});
if (inputEle != null && pwdEle != null)
{
loginCount++;
InfoHelper.WriteLine($"正在进行第{loginCount}次模拟登录...");
VTX.FW.Helper.LogHelper.WriteInfo("RunAsync", $"正在进行第{loginCount}次模拟登录...");
var login = FireFoxBeginSliderLoginHandler(ref driver);
if (login.IsCompleted)
inputEle.SendKeys("18140082327");
pwdEle.SendKeys("ls123456");
var buttonEle = driver.FindElement(By.CssSelector(".submit-btn"));
Thread.Sleep(1000);
//开始登录
buttonEle.Click();
//开始模拟登录
for (var loginCount = 0; loginCount <= 4; loginCount++)
{
driver.SwitchTo().DefaultContent();
Thread.Sleep(5 * 1000);
var cookies = driver.Manage().Cookies.AllCookies;
InfoHelper.WriteLine($"操作完成,正在等待结果");
VTX.FW.Helper.LogHelper.WriteInfo("RunAsync", $"操作完成,正在等待结果");
//处理
foreach (var item in cookies)
InfoHelper.WriteLine($"正在进行第{loginCount}次模拟登录...");
VTX.FW.Helper.LogHelper.WriteInfo("RunAsync", $"正在进行第{loginCount}次模拟登录...");
var login = FireFoxBeginSliderLoginHandler(driver);
if (login.IsCompleted)
{
_loginCookies += item.Name + "=" + item.Value + ";";
}
_loginCookies = _loginCookies.Substring(0, _loginCookies.Length - 1);
if (!string.IsNullOrEmpty(_loginCookies) && _loginCookies.Contains("sensorsdata2015jssdkcross") && _loginCookies.Contains("_eeos_traffic"))
{
flag = true;
break;
driver.SwitchTo().DefaultContent();
Thread.Sleep(5 * 1000);
var cookies = driver.Manage().Cookies.AllCookies;
InfoHelper.WriteLine($"操作完成,正在等待结果");
VTX.FW.Helper.LogHelper.WriteInfo("RunAsync", $"操作完成,正在等待结果");
//处理
foreach (var item in cookies)
{
_loginCookies += item.Name + "=" + item.Value + ";";
}
_loginCookies = _loginCookies.Substring(0, _loginCookies.Length - 1);
if (!string.IsNullOrEmpty(_loginCookies) && _loginCookies.Contains("sensorsdata2015jssdkcross") && _loginCookies.Contains("_eeos_traffic"))
{
flag = true;
break;
}
else
{
_loginCookies = "";
}
}
else
{
_loginCookies = "";
InfoHelper.WriteLine("未知异常,程序退出");
VTX.FW.Helper.LogHelper.WriteInfo("RunAsync", $"未知异常,程序退出");
break;
}
}
else
{
InfoHelper.WriteLine("未知异常,程序退出");
VTX.FW.Helper.LogHelper.WriteInfo("RunAsync", $"未知异常,程序退出");
break;
}
}
}
catch (Exception ex)
{
CloseFireFoxDriver(driver);
VTX.FW.Helper.LogHelper.WriteInfo("RunAsync", $"获取cooki失败,{ex.Message}");
InfoHelper.WriteLine($"获取cooki失败,{ex.Message}");
}
finally
{
driver.Close();
driver.Quit();
driver.Dispose();
}
}
catch (Exception ex)
InfoHelper.WriteLine("完成登录...");
VTX.FW.Helper.LogHelper.WriteInfo("RunAsync", $"完成登录...");
return flag;
}
#region 异常 退出chromedriver
[DllImport("user32.dll", EntryPoint = "FindWindow")]
private extern static IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll", EntryPoint = "SendMessage")]
public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
public const int SW_HIDE = 0;
public const int SW_SHOW = 5;
[DllImport("user32.dll", EntryPoint = "ShowWindow")]
public static extern int ShowWindow(IntPtr hwnd, int nCmdShow);
/// <summary>
/// 获取窗口句柄
/// </summary>
/// <returns></returns>
public static IntPtr GetWindowHandle()
{
string name = (Environment.CurrentDirectory + "\\geckodriver.exe");
IntPtr hwd = FindWindow(null, name);
return hwd;
}
/// <summary>
/// 关闭chromedriver窗口
/// </summary>
public static void CloseWindow()
{
try
{
VTX.FW.Helper.LogHelper.WriteInfo("RunAsync", $"获取cooki失败,{ex.Message}");
InfoHelper.WriteLine($"获取cooki失败,{ex.Message}");
IntPtr hwd = GetWindowHandle();
SendMessage(hwd, 0x10, 0, 0);
}
finally
catch
{
}
}
/// <summary>
/// 退出chromedriver
/// </summary>
/// <param name="driver"></param>
public static void CloseFireFoxDriver(IWebDriver driver)
{
try
{
driver.Close();
driver.Quit();
driver.Dispose();
}
InfoHelper.WriteLine("完成登录...");
VTX.FW.Helper.LogHelper.WriteInfo("RunAsync", $"完成登录...");
return flag;
catch
{
}
CloseWindow();
}
#endregion 异常 退出chromedriver
public static Task FireFoxBeginSliderLoginHandler(ref IWebDriver driver)
public static Task FireFoxBeginSliderLoginHandler(IWebDriver driver)
{
//等待滑块加载
Thread.Sleep(5000);
......@@ -208,7 +263,7 @@ namespace TicketSpider.Spiders.ClassInRule
bgPng.SaveAsFile(fileBgPath, ScreenshotImageFormat.Png);
blockPng.SaveAsFile(fileBlockPath, ScreenshotImageFormat.Png);
var bgX = FireFoxGetBoundary(fileBgPath, fileBlockPath);
InfoHelper.WriteLine($"读取背景缺口边界X坐标: {bgX}");
VTX.FW.Helper.LogHelper.WriteInfo("BeginSliderLoginHandler", $"读取背景缺口边界X坐标: {bgX}");
......@@ -237,7 +292,7 @@ namespace TicketSpider.Spiders.ClassInRule
return Task.CompletedTask;
}
private static int FireFoxGetBoundary(string fileBgPath,string fileBlockPath)
private static int FireFoxGetBoundary(string fileBgPath, string fileBlockPath)
{
var dirpath = $"{Environment.CurrentDirectory}\\geetest";
var bgImg = Cv2.ImRead(fileBgPath);
......@@ -245,17 +300,17 @@ namespace TicketSpider.Spiders.ClassInRule
var bgEdge = new Mat();
Cv2.Canny(bgImg, bgEdge, 100, 200);
var tpEdge = new Mat();
Cv2.Canny(tpImg, edges: tpEdge, 100, 200);
var bgPic = new Mat();
Cv2.CvtColor(bgEdge, bgPic, ColorConversionCodes.GRAY2RGB);
var tpPic = new Mat();
Cv2.CvtColor(tpEdge, tpPic, ColorConversionCodes.GRAY2RGB);
var res = new Mat();
Cv2.MatchTemplate(bgPic, tpPic, res, TemplateMatchModes.CCoeffNormed);
......@@ -272,7 +327,7 @@ namespace TicketSpider.Spiders.ClassInRule
return maxLoc.X - 20;
}
public static Task BeginSliderLoginHandler(ref IWebDriver driver)
{
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment