Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
E
EduSpider
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
viitto
EduSpider
Commits
703a941d
Commit
703a941d
authored
Sep 09, 2022
by
黄奎
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
页面修改
parent
eba90070
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
136 additions
and
136 deletions
+136
-136
Program.cs
EduSpider/Program.cs
+0
-55
ClassInAccountManager.cs
EduSpider/Spiders/ClassInRule/ClassInAccountManager.cs
+136
-81
No files found.
EduSpider/Program.cs
View file @
703a941d
...
...
@@ -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
EduSpider/Spiders/ClassInRule/ClassInAccountManager.cs
View file @
703a941d
...
...
@@ -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
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment