NaiboWang-Alienware 1 год назад
Родитель
Сommit
e9d0caea95
136 измененных файлов: 6024 добавлений и 2320 удалений
  1. +0
    -2
      C#/.gitignore
  2. +0
    -174
      C#/Class1.cs
  3. +0
    -83
      C#/Flow.Designer.cs
  4. +0
    -137
      C#/Flow.cs
  5. +0
    -414
      C#/Flow.resx
  6. +0
    -22
      C#/Program.cs
  7. +0
    -69
      C#/Properties/app.manifest
  8. +0
    -0
      C#/ServiceWrapperEntry/.gitignore
  9. +2
    -2
      C#/ServiceWrapperEntry/EasySpiderEntry.sln
  10. +0
    -0
      C#/ServiceWrapperEntry/Readme.md
  11. +2
    -0
      C#/ServiceWrapperEntry/ServiceWrapperEntry/.gitignore
  12. +0
    -0
      C#/ServiceWrapperEntry/ServiceWrapperEntry/App.config
  13. +1
    -1
      C#/ServiceWrapperEntry/ServiceWrapperEntry/Class1.cs
  14. +12
    -11
      C#/ServiceWrapperEntry/ServiceWrapperEntry/Flow.Designer.cs
  15. +1
    -1
      C#/ServiceWrapperEntry/ServiceWrapperEntry/Flow.cs
  16. +0
    -0
      C#/ServiceWrapperEntry/ServiceWrapperEntry/Flow.resx
  17. +1
    -1
      C#/ServiceWrapperEntry/ServiceWrapperEntry/Program.cs
  18. +5
    -5
      C#/ServiceWrapperEntry/ServiceWrapperEntry/Properties/AssemblyInfo.cs
  19. +15
    -15
      C#/ServiceWrapperEntry/ServiceWrapperEntry/Properties/Resources.Designer.cs
  20. +0
    -0
      C#/ServiceWrapperEntry/ServiceWrapperEntry/Properties/Resources.resx
  21. +6
    -6
      C#/ServiceWrapperEntry/ServiceWrapperEntry/Properties/Settings.Designer.cs
  22. +0
    -0
      C#/ServiceWrapperEntry/ServiceWrapperEntry/Properties/Settings.settings
  23. +3
    -1
      C#/ServiceWrapperEntry/ServiceWrapperEntry/PublicVariable.cs
  24. +2
    -2
      C#/ServiceWrapperEntry/ServiceWrapperEntry/ServiceWrapperEntry.csproj
  25. +0
    -0
      C#/ServiceWrapperEntry/ServiceWrapperEntry/ServiceWrapperEntry.csproj.user
  26. +15
    -15
      C#/ServiceWrapperEntry/ServiceWrapperEntry/Start.Designer.cs
  27. +7
    -7
      C#/ServiceWrapperEntry/ServiceWrapperEntry/Start.cs
  28. +0
    -0
      C#/ServiceWrapperEntry/ServiceWrapperEntry/Start.resx
  29. +0
    -0
      C#/ServiceWrapperEntry/ServiceWrapperEntry/favicon.ico
  30. +0
    -0
      C#/ServiceWrapperEntry/ServiceWrapperEntry/packages.config
  31. +0
    -255
      C#/Start.cs
  32. +0
    -189
      C#/WindowsFormsApp4.csproj
  33. +0
    -13
      C#/WindowsFormsApp4.csproj.user
  34. Двоичные данные
      C#/shortcut/.vs/shortcut/FileContentIndex/23f98718-32b2-4c38-b5b9-aa3fd9241e3a.vsidx
  35. Двоичные данные
      C#/shortcut/.vs/shortcut/FileContentIndex/392fedf3-4ef0-474a-95e3-6021f9c8513e.vsidx
  36. Двоичные данные
      C#/shortcut/.vs/shortcut/FileContentIndex/7456acef-50d7-43b8-aef3-f3c1a9799585.vsidx
  37. +0
    -0
      C#/shortcut/.vs/shortcut/FileContentIndex/read.lock
  38. Двоичные данные
      C#/shortcut/.vs/shortcut/v17/.suo
  39. +25
    -0
      C#/shortcut/shortcut.sln
  40. +0
    -0
      C#/shortcut/shortcut/App.config
  41. +48
    -0
      C#/shortcut/shortcut/Form1.Designer.cs
  42. +26
    -0
      C#/shortcut/shortcut/Form1.cs
  43. +120
    -0
      C#/shortcut/shortcut/Form1.resx
  44. +28
    -0
      C#/shortcut/shortcut/Program.cs
  45. +36
    -0
      C#/shortcut/shortcut/Properties/AssemblyInfo.cs
  46. +39
    -31
      C#/shortcut/shortcut/Properties/Resources.Designer.cs
  47. +0
    -0
      C#/shortcut/shortcut/Properties/Resources.resx
  48. +17
    -13
      C#/shortcut/shortcut/Properties/Settings.Designer.cs
  49. +0
    -0
      C#/shortcut/shortcut/Properties/Settings.settings
  50. +6
    -0
      C#/shortcut/shortcut/bin/Debug/shortcut.exe.config
  51. Двоичные данные
      C#/shortcut/shortcut/bin/Debug/shortcut.pdb
  52. +6
    -0
      C#/shortcut/shortcut/bin/Release/EasySpider_ShortCut.exe.config
  53. Двоичные данные
      C#/shortcut/shortcut/bin/Release/EasySpider_ShortCut.pdb
  54. +0
    -0
      C#/shortcut/shortcut/favicon.ico
  55. +4
    -0
      C#/shortcut/shortcut/obj/Debug/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs
  56. Двоичные данные
      C#/shortcut/shortcut/obj/Debug/DesignTimeResolveAssemblyReferences.cache
  57. Двоичные данные
      C#/shortcut/shortcut/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache
  58. Двоичные данные
      C#/shortcut/shortcut/obj/Debug/shortcut.Form1.resources
  59. Двоичные данные
      C#/shortcut/shortcut/obj/Debug/shortcut.Properties.Resources.resources
  60. Двоичные данные
      C#/shortcut/shortcut/obj/Debug/shortcut.csproj.AssemblyReference.cache
  61. +1
    -0
      C#/shortcut/shortcut/obj/Debug/shortcut.csproj.CoreCompileInputs.cache
  62. +11
    -0
      C#/shortcut/shortcut/obj/Debug/shortcut.csproj.FileListAbsolute.txt
  63. Двоичные данные
      C#/shortcut/shortcut/obj/Debug/shortcut.csproj.GenerateResource.cache
  64. +0
    -0
      C#/shortcut/shortcut/obj/Debug/shortcut.csproj.SuggestedBindingRedirects.cache
  65. Двоичные данные
      C#/shortcut/shortcut/obj/Debug/shortcut.pdb
  66. +4
    -0
      C#/shortcut/shortcut/obj/Release/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs
  67. Двоичные данные
      C#/shortcut/shortcut/obj/Release/DesignTimeResolveAssemblyReferencesInput.cache
  68. Двоичные данные
      C#/shortcut/shortcut/obj/Release/EasySpider_ShortCut.pdb
  69. Двоичные данные
      C#/shortcut/shortcut/obj/Release/shortcut.Form1.resources
  70. Двоичные данные
      C#/shortcut/shortcut/obj/Release/shortcut.Properties.Resources.resources
  71. Двоичные данные
      C#/shortcut/shortcut/obj/Release/shortcut.csproj.AssemblyReference.cache
  72. +1
    -0
      C#/shortcut/shortcut/obj/Release/shortcut.csproj.CoreCompileInputs.cache
  73. +11
    -0
      C#/shortcut/shortcut/obj/Release/shortcut.csproj.FileListAbsolute.txt
  74. Двоичные данные
      C#/shortcut/shortcut/obj/Release/shortcut.csproj.GenerateResource.cache
  75. +0
    -0
      C#/shortcut/shortcut/obj/Release/shortcut.csproj.SuggestedBindingRedirects.cache
  76. +89
    -0
      C#/shortcut/shortcut/shortcut.csproj
  77. +0
    -0
      Examples/Sample
  78. +0
    -0
      Examples/Sample
  79. +1882
    -0
      sks/author_list.csv
  80. +0
    -0
      Examples/Sample
  81. +0
    -0
      Examples/Sample
  82. +0
    -0
      Examples/Sample
  83. +0
    -0
      sks/raw_data.csv
  84. +0
    -0
      Examples/Sample
  85. +3227
    -0
      sks/关键词
  86. +1
    -0
      sks/关键词.CSV
  87. +0
    -1
      ExecuteStage/Readme.md
  88. +44
    -39
      ExecuteStage/easyspider_executestage.py
  89. +3
    -0
      ExecuteStage/generateEXE.cmd
  90. +0
    -1
      ExecuteStage/packageCommand.cmd
  91. +0
    -4
      ExecuteStage/packageCommand.md
  92. +0
    -0
      Extension/CN.crx
  93. +4
    -4
      Extension/EasySpider/_locales/en/messages.json
  94. +0
    -0
      Extension/EasySpider/images/api_thumb_450.jpg
  95. +0
    -0
      Extension/EasySpider/images/icon-128.png
  96. +0
    -0
      Extension/EasySpider/images/icon-16.png
  97. +0
    -0
      Extension/EasySpider/images/icon-19.png
  98. +0
    -0
      Extension/EasySpider/images/icon-38.png
  99. +0
    -0
      Extension/EasySpider/manifest.json
  100. +78
    -0
      Extension/EasySpider/manifest.json.bak

+ 0
- 2
C#/.gitignore Просмотреть файл

@ -1,2 +0,0 @@
obj/
.vs/

+ 0
- 174
C#/Class1.cs Просмотреть файл

@ -1,174 +0,0 @@
using CefSharp;
using CefSharp.Internals;
using CefSharp.Web;
using CefSharp.WinForms;
using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
namespace ServiceWrapper
{
public class MouseHelper
{
[System.Runtime.InteropServices.DllImport("user32")]
public static extern int mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo);
//移动鼠标
public const int MOUSEEVENTF_MOVE = 0x0001;
//模拟鼠标左键按下
public const int MOUSEEVENTF_LEFTDOWN = 0x0002;
//模拟鼠标左键抬起
public const int MOUSEEVENTF_LEFTUP = 0x0004;
//模拟鼠标右键按下
public const int MOUSEEVENTF_RIGHTDOWN = 0x0008;
//模拟鼠标右键抬起
public const int MOUSEEVENTF_RIGHTUP = 0x0010;
//模拟鼠标中键按下
public const int MOUSEEVENTF_MIDDLEDOWN = 0x0020;
//模拟鼠标中键抬起
public const int MOUSEEVENTF_MIDDLEUP = 0x0040;
//标示是否采用绝对坐标
public const int MOUSEEVENTF_ABSOLUTE = 0x8000;
[DllImport("user32.dll")]
public static extern bool SetCursorPos(int X, int Y);
}
public class Parameters
{
/// <summary>
///
/// </summary>
public string url { get; set; }
}
public class Data
{
/// <summary>
///
/// </summary>
public int option { get; set; }
/// <summary>
///
/// </summary>
public Parameters parameters { get; set; }
}
public class FlowMessage
{
/// <summary>
///
/// </summary>
public int type { get; set; }
/// <summary>
///
/// </summary>
public Data data { get; set; }
}
public class Message
{
/// <summary>
///
/// </summary>
public int id { get; set; }
public string links { get; set; }
public string link { get; set; }
//键盘输入的值
public string keyboardStr { get; set; }
//直接转接流程图的消息
public string pipe { get; set; }
}
public class Msg
{
/// <summary>
///
/// </summary>
public int type { get; set; }
/// <summary>
/// 从哪里来
/// </summary>
public int from { get; set; }
public Message message { get; set; }
}
public class RequestContextHandler : IRequestContextHandler
{
public IResourceRequestHandler GetResourceRequestHandler(IBrowser browser, IFrame frame, IRequest request, bool isNavigation, bool isDownload, string requestInitiator, ref bool disableDefaultHandling)
{
return null;
}
public bool OnBeforePluginLoad(string mimeType, string url, bool isMainFrame, string topOriginUrl, WebPluginInfo pluginInfo, ref PluginPolicy pluginPolicy)
{
return true;
}
public void OnRequestContextInitialized(IRequestContext requestContext)
{
}
}
//加载窗口时的事件设置
public class RenderProcessMessageHandler : IRenderProcessMessageHandler
{
public void OnContextReleased(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame)
{
//throw new NotImplementedException();
}
public void OnFocusedNodeChanged(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IDomNode node)
{
//throw new NotImplementedException();
}
public void OnUncaughtException(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, JavascriptException exception)
{
//throw new NotImplementedException();
}
// Wait for the underlying JavaScript Context to be created. This is only called for the main frame.
// If the page has no JavaScript, no context will be created.
void IRenderProcessMessageHandler.OnContextCreated(IWebBrowser browserControl, IBrowser browser, IFrame frame)
{
//MessageBox.Show("zhixing");
}
}
/// <summary>
/// 在自己窗口打开链接
/// </summary>
internal class OpenPageSelf : ILifeSpanHandler
{
public bool DoClose(IWebBrowser browserControl, IBrowser browser)
{
return false;
}
public void OnAfterCreated(IWebBrowser browserControl, IBrowser browser)
{
}
public void OnBeforeClose(IWebBrowser browserControl, IBrowser browser)
{
}
public bool OnBeforePopup(IWebBrowser browserControl, IBrowser browser, IFrame frame, string targetUrl,
string targetFrameName, WindowOpenDisposition targetDisposition, bool userGesture, IPopupFeatures popupFeatures,
IWindowInfo windowInfo, IBrowserSettings browserSettings, ref bool noJavascriptAccess, out IWebBrowser newBrowser)
{
newBrowser = null;
var chromiumWebBrowser = (ChromiumWebBrowser)browserControl;
chromiumWebBrowser.Load(targetUrl);
return true; //Return true to cancel the popup creation copyright by codebye.com.
}
}
}

+ 0
- 83
C#/Flow.Designer.cs Просмотреть файл

@ -1,83 +0,0 @@
namespace ServiceWrapper
{
partial class Flow
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows 窗体设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要修改
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Flow));
this.panel1 = new System.Windows.Forms.Panel();
this.timer1 = new System.Windows.Forms.Timer(this.components);
this.timer2 = new System.Windows.Forms.Timer(this.components);
this.SuspendLayout();
//
// panel1
//
this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.panel1.AutoSize = true;
this.panel1.Location = new System.Drawing.Point(2, 3);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(923, 676);
this.panel1.TabIndex = 0;
//
// timer1
//
this.timer1.Interval = 500;
this.timer1.Tick += new System.EventHandler(this.timer1_Tick_1);
//
// timer2
//
this.timer2.Tick += new System.EventHandler(this.timer2_Tick);
//
// Flow
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(931, 713);
this.Controls.Add(this.panel1);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Name = "Flow";
this.Text = "服务包装手动版";
this.Load += new System.EventHandler(this.Flow_Load);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.Timer timer1;
private System.Windows.Forms.Timer timer2;
}
}

+ 0
- 137
C#/Flow.cs Просмотреть файл

@ -1,137 +0,0 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using CefSharp;
using CefSharp.WinForms;
using System.Runtime.InteropServices; //引用此名称空间,简化后面的代码
using System.Net;
using System.Diagnostics;
namespace ServiceWrapper
{
public partial class Flow : Form, IMessageFilter
{
public ChromiumWebBrowser chromeBrowser;
public bool ChromeNow = false; //标记现在所在窗口是否为chrome
public static string flowChartUrl = "http://183.129.170.180:8041/frontEnd/FlowChart.html?id="; //流程图所在的位置
public string url = flowChartUrl + "-1";
public Flow()
{
InitializeComponent();
}
public Flow(string link)
{
InitializeComponent();
url = link;
}
// P/Invoke declarations
[DllImport("user32.dll")]
public static extern IntPtr GetForegroundWindow();
[DllImport("user32.dll")]
private extern static bool SwapMouseButton(bool fSwap);
[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern int SetForegroundWindow(IntPtr hwnd);
public const int WM_CLOSE = 0x10;
public bool closedriver = true;
[DllImport("user32.dll", EntryPoint = "SendMessage")]
private static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);
public bool PreFilterMessage(ref System.Windows.Forms.Message SystemMessage)
{
if (SystemMessage.Msg >= 513 && SystemMessage.Msg <= 515)
{//不响应鼠标左键消息
return true;
}
return false;
}
private void Flow_Load(object sender, EventArgs e)
{
InitializeChromium();
PublicVariable.isInitialized = true;
//保证并排平铺
int width = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Size.Width;
int height = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Size.Height;
StartPosition = FormStartPosition.Manual; //窗体的位置由Location属性决定
Location = (Point)new Size(0, 0); //窗体的起始位置为(x,y)
Width = width;
Height = Convert.ToInt32(height * 0.8);
FormClosing += Flow_FormClosing;
}
//初始化浏览器并启动
public void InitializeChromium()
{
if (!PublicVariable.isInitialized)//只初始化一次
{
CefSettings settings = new CefSettings();
Cef.Initialize(settings);
}
// Create a browser component
chromeBrowser = new ChromiumWebBrowser(url);
//跨域访问允许
chromeBrowser.BrowserSettings.FileAccessFromFileUrls = CefState.Enabled;
chromeBrowser.BrowserSettings.UniversalAccessFromFileUrls = CefState.Enabled;
//textBox1.Text = url;
// Add it to the form and fill it to the form window.
panel1.Controls.Add(chromeBrowser);
chromeBrowser.Dock = DockStyle.Fill;
chromeBrowser.RenderProcessMessageHandler = new RenderProcessMessageHandler();
}
//窗体关闭时,记得停止浏览器
private void Flow_FormClosing(object sender, FormClosingEventArgs e)
{
if(closedriver)
{
//Cef.Shutdown();//关掉内嵌控件
try
{
//PublicVariable.chrome.Kill();//关掉chrome
//SendMessage(Start.chromeId, WM_CLOSE, 0, 0);//关掉chrome
Start.browser.Quit();//关掉chromedriver
}
catch (Exception)
{
}
}
PublicVariable.start.Show(); //重新显示初始框
}
private void timer1_Tick_1(object sender, EventArgs e)
{
if (Start.chromeId != GetForegroundWindow())
{
SwapMouseButton(false);
}
else
{
SwapMouseButton(true);
}
//textBox1.Text = "当前进程:" + Process.GetCurrentProcess().ProcessName +
// ",当前激活的进程:" + ;
////打开chrome,跳转初始输入网页界面,传回主程序chrome的进程id号,然后打开链接
}
private void panel1_Paint(object sender, PaintEventArgs e)
{
SetForegroundWindow(Start.chromeId); //打开流程图窗口后将chrome窗口显示到最前方
}
private void timer2_Tick(object sender, EventArgs e)
{
if (Start.chromeId == GetForegroundWindow())
{
SwapMouseButton(true);
timer1.Enabled = true; //打开检测鼠标的程序
}
}
}
}

+ 0
- 414
C#/Flow.resx Просмотреть файл

@ -1,414 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="timer1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="timer2.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>107, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAEAQEAAAAEAIAAoQgAAFgAAACgAAABAAAAAgAAAAAEAIAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAA
AAD/////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////7+/v/+/v7//v7+///////+/v7//v7+////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////v7+//7+/v/+/v7/////////
/////////////////////////v7+//7+/v//////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////7+
/v/+/v7//v7+///////+/v7//v7+//////////////////7+/v/+/v7//v7+////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
///////////////////+/v7//v7+/////////////v7+//7+/v/+/v7////////////+/v7//v7+//7+
/v//////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
/////////////////////////v7+////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////+/v7//v7+////
/////////v7+//7+/v//////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////7+/v//////////////////////////////
////////////////////////////////////////////////////////////////////////////////
/////////v7+//7+/v//////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
/////////////////////////v7+//7+/v/+/v7////////////////////////////+/v7/+vr6/5eX
l/+YmJj/+vr6//7+/v//////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////7+/v/+/v7/////////////////////////
///9/f3/4uLi/0lJSf8AAAD/AAAA/0lJSf/j4+P//f39////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
///////////////////9/f3/ubm5/xkZGf8BAQH/AAAA/wAAAP8BAQH/GRkZ/7m5uf/+/v7//v7+////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////9/f3/kpKS/wYGBv8AAAD/AAAA/wAAAP8AAAD/AAAA/wEB
Af8GBgb/kpKS//7+/v/+/v7/////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////9/f3/hoaG/wICAv8AAAD/AAAA/wAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wICAv+FhYX//f39////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////7+/v/+/v7/q6ur/wQE
BP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AgIC/6ysrP/+/v7/////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
///+/v7/9PT0/x8fH/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wEB
Af8dHR3/9fX1////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
/////////////////////////v7+/7W1tf8AAAD/AAAA/wICAv8aGhr/AwMD/wAAAP8AAAD/AAAA/wAA
AP8EBAT/Ghoa/wICAv8AAAD/AAAA/7a2tv//////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////7+/v+RkZH/AAAA/wAAAP8gICD/+/v7/9fX
1/9UVFT/AgIC/wICAv9VVVX/2NjY//v7+/8fHx//AAAA/wAAAP+SkpL/////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////+/v7/mpqa/wAA
AP8AAAD/Nzc3//7+/v/+/v7/ysrK/8TExP/Dw8P/ycnJ//7+/v/9/f3/ODg4/wAAAP8AAAD/mpqa////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
/////////v7+/8PDw/8AAAD/AAAA/zU1Nf/+/v7//v7+/83Nzf+Wlpb/lpaW/87Ozv/+/v7//f39/zU1
Nf8AAAD/AAAA/8PDw///////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//////////////////////////////7+/v/19fX/EBAQ/wAAAP8YGBj/4uLi/6mpqf8tLS3/AgIC/wEB
Af8tLS3/qqqq/+Hh4f8YGBj/AAAA/xAQEP/19fX/////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////v7+//7+/v/+/v7//v7+/1lZWf8AAAD/AQEB/wMD
A/8DAwP/Li4u/2xsbP9vb2//NDQ0/wICAv8DAwP/AAAA/wAAAP9ZWVn//f39////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////7+/v/+/v7/////////
//+0tLT/AAAA/wAAAP8JCQn/np6e/+/v7/+1tbX/srKy/+7u7v+qqqr/DAwM/wAAAP8BAQH/tLS0////
//////////////7+/v/+/v7/////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
///+/v7//v7+////////////+Pj4/x4eHv8CAgL/mJiY/8XFxf8fHx//AQEB/wAAAP8aGhr/vr6+/6Wl
pf8BAQH/HR0d//j4+P/////////////////+/v7//v7+////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////7+/v99fX3/LS0t/+bm5v8YGBj/AAAA/wAA
AP8AAAD/AAAA/xQUFP/j4+P/MjIy/319ff/9/f3/////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////+/v7/3t7e/4GB
gf+BgYH/AQEB/wAAAP8AAAD/AAAA/wAAAP8AAAD/enp6/4WFhf/e3t7//v7+////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//////////////39/f/n5+f/MzMz/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/zIyMv/o6Oj//f39////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////+/v7//v7+////
///////////////////////////////////+/v7/7+/v/wcHB/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
AP8HBwf/8fHx//7+/v//////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
/////////v7+//7+/v///////////////////////////////////////f39/9jY2P+IiIj/fX19/zEx
Mf8ICAj/CAgI/y4uLv99fX3/iIiI/9nZ2f/+/v7/////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////Hx
8f9mZmb/KSkp/zY2Nv+ioqL/QUFB/z09Pf+kpKT/PDw8/ygoKP9oaGj/8fHx//7+/v//////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
///+/v7//v7+//7+/v+CgoL/BwcH/wcHB/8BAQH/DQ0N/7Gxsf+rq6v/Dg4O/wEBAf8GBgb/BwcH/4OD
g//9/f3//v7+////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
///+/v7//v7+//7+/v/+/v7//v7+//j4+P/29vb/LCws/wcHB/8HBwf/AAAA/wMDA/9lZWX/Y2Nj/wAA
AP8AAAD/BgYG/wcHB/8sLCz/9fX1//f39//+/v7//v7+//7+/v/+/v7//v7+////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
/////////////////////////v7+//Pz8//X19f/vr6+/4iIiP8yMjL/srKy/wEBAf8GBgb/BAQE/wEB
Af8nJyf/aGho/2FhYf8lJSX/AQEB/wcHB/8HBwf/AQEB/7Kysv80NDT/iIiI/729vf/X19f/8vLy//7+
/v//////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////6Ojo/1RUVP8FBQX/AAAA/wAAAP8AAAD/AgIC/6Cg
oP/V1dX/rq6u/62trf+rq6v/ioqK/05OTv9QUFD/kJCQ/7CwsP+pqan/rq6u/9XV1f+fn5//AwMD/wAA
AP8AAAD/AAAA/wYGBv9UVFT/6enp//7+/v//////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////+vr6/z8/P/8BAQH/AAAA/wAA
AP8AAAD/AAAA/wcHB/+vr6//+fn5/xQUFP8ICAj/CAgI/wcHB/8JCQn/CAgI/wcHB/8HBwf/CAgI/xQU
FP/4+Pj/sLCw/wYGBv8AAAD/AAAA/wAAAP8AAAD/AAAA/0BAQP/6+vr/////////////////////////
/////////////////////////v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+////////////////////
///////////////////////////////////////////////////////////////////+/v7//v7+/6am
pv8AAAD/AAAA/wAAAP8AAAD/AAAA/wEBAf+Li4v//v7+//z8/P++vr7/v7+//4ODg/95eXn/2NjY/9LS
0v9ycnL/eXl5/8DAwP+9vb3//Pz8//39/f+Li4v/AQEB/wAAAP8AAAD/AAAA/wAAAP8AAAD/p6en//7+
/v////////////////////////////////////////////7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+
/v//////////////////////////////////////////////////////////////////////////////
/////////v7+//z8/P86Ojr/AAAA/wAAAP8AAAD/AAAA/wEBAf9QUFD/+/v7//7+/v/q6ur/GBgY/wkJ
Cf+ampr//f39//7+/v/+/v7//f39/5mZmf8ICAj/GBgY/+vr6//+/v7/+vr6/09PT/8BAQH/AAAA/wAA
AP8AAAD/AAAA/zo6Ov/8/Pz/////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//////////////////////////////7+/v/c3Nz/BQUF/wAAAP8AAAD/AAAA/wgICP9nZ2f/8vLy//7+
/v/+/v7/pqam/wAAAP8BAQH/m5ub//7+/v////////////////+ampr/AAAA/wEBAf+mpqb//v7+//7+
/v/y8vL/Z2dn/wgICP8BAQH/AAAA/wAAAP8EBAT/3Nzc////////////////////////////////////
///////////////////////////////////+/v7//v7+////////////////////////////////////
///////////////////////////////////////////////////+/v7/+fn5/93d3f/Gxsb/vLy8/8nJ
yf/v7+///f39//7+/v///////f39/0RERP8AAAD/AgIC/+Dg4P//////////////////////39/f/wEB
Af8AAAD/Q0ND//39/f/+/v7//v7+//39/f/v7+//ycnJ/729vf/Gxsb/3Nzc//n5+f//////////////
/////////////////////////////////////////////////////////v7+//7+/v//////////////
////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////+/v7//v7+/7y8vP8BAQH/AAAA/zMzM//9/f3/////////
//////////////39/f80NDT/AAAA/wICAv+8vLz//v7+////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////7+/v/+/v7//v7+/+jo6P8lJSX/AAAA/wEB
Af+Dg4P//v7+///////////////////////+/v7/g4OD/wEBAf8AAAD/JCQk/+rq6v/+/v7/////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////+/v7//f39/+np
6f89PT3/AAAA/wAAAP8AAAD/y8vL//7+/v///////////////////////////8vLy/8AAAD/AAAA/wAA
AP86Ojr/6enp////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
///+/v7//f39/8jIyP8oKCj/AAAA/wEBAf8sLCz/DQ0N//j4+P/+/v7//v7+//7+/v//////////////
///39/f/Dg4O/ywsLP8CAgL/AAAA/ykpKf/IyMj//v7+//7+/v////////////7+/v/+/v7/////////
//////////////////////////////////////////////////////////////7+/v/+/v7/////////
////////////////////////////////////////////////////////////////////////////////
//////////////7+/v/9/f3/5+fn/29vb/8HBwf/AAAA/wEBAf9NTU3/2NjY/ysrK//+/v7///////7+
/v/+/v7//////////////////f39/ysrK//Y2Nj/TU1N/wEBAf8AAAD/BgYG/25ubv/o6Oj//f39//7+
/v/+/v7//v7+/////////////v7+//7+/v/+/v7//v7+/////////////v7+//7+/v/+/v7/////////
///+/v7//v7+//7+/v//////////////////////////////////////////////////////////////
//////////////////////////////39/f/q6ur/fHx8/xAQEP8BAQH/AgIC/xISEv8qKir/9vb2//T0
9P86Ojr//v7+///////+/v7//v7+//////////////////39/f85OTn/8/Pz//X19f8qKir/ExMT/wEB
Af8AAAD/EBAQ/3x8fP/q6ur//v7+//7+/v////////////7+/v/+/v7//v7+//7+/v////////////7+
/v/+/v7//v7+//////////////////7+/v/+/v7/////////////////////////////////////////
///////////////////////////////////+/v7//f39//Ly8v+CgoL/EhIS/wICAv8BAQH/CAgI/62t
rf+rq6v/cXFx//7+/v/9/f3/QUFB//39/f/+/v7////////////////////////////9/f3/QUFB//39
/f/+/v7/cXFx/6urq/+tra3/CAgI/wEBAf8CAgL/ExMT/4KCgv/x8fH//f39////////////////////
///////////////////+/v7//v7+//7+/v//////////////////////////////////////////////
///////////////////////////////////////////////////+/v7//f39/7S0tP8iIiL/AQEB/y4u
Lv9mZmb/AgIC/2ZmZv/9/f3/3t7e/7a2tv/+/v7//f39/4uLi//8/Pz//v7+////////////////////
/////////Pz8/4uLi//9/f3//v7+/7e3t//e3t7//f39/2ZmZv8CAgL/ZmZm/y4uLv8CAgL/IiIi/7Oz
s//9/f3//v7+//7+/v///////////////////////v7+//7+/v/+/v7/////////////////////////
///////////////////////////////////////////////////////////////////+/v7/+vr6/3t7
e/8FBQX/ExMT/6Kiov/5+fn/ZWVl/wQEBP/U1NT//v7+//7+/v/+/v7//v7+//7+/v/9/f3//f39////
//////////////////////////////7+/v/9/f3//v7+//7+/v/+/v7//v7+///////U1NT/BAQE/2Vl
Zf/5+fn/oqKi/xISEv8FBQX/enp6//r6+v/+/v7//v7+////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
///+/v7/+/v7/2xsbP8CAgL/BQUF/8HBwf/9/f3/9/f3/xYWFv83Nzf//f39////////////////////
///+/v7//v7+////////////////////////////////////////////////////////////////////
/////////Pz8/zg4OP8YGBj/+Pj4//7+/v/BwcH/BwcH/wMDA/9sbGz//Pz8//7+/v//////////////
////////////////////////////////////////////////////////////////////////////////
/////////////////////////f39/5WVlf8RERH/YWFh/1JSUv/+/v7//v7+/9LS0v8BAQH/fn5+//39
/f//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////9+fn7/AgIC/9LS0v///////v7+/1NTU/9iYmL/ExMT/5SU
lP/9/f3///////////////////////////////////////////////////////////////////////7+
/v/+/v7//v7+/////////////////////////////////9/f3/8VFRX/vLy8/5aWlv+Ojo7//v7+//7+
/v+qqqr/AQEB/6qqqv/+/v7/////////////////////////////////////////////////////////
////////////////////////////////////////////////////////qamp/wEBAf+rq6v///////7+
/v+Ojo7/lpaW/7y8vP8WFhb/39/f//39/f//////////////////////////////////////////////
//////////////7+/v/+/v7//v7+//7+/v////////////////////////////39/f9oaGj/dnZ2//z8
/P+cnJz/n5+f////////////lZWV/wAAAP+4uLj/////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////7e3
t/8AAAD/lpaW///////+/v7/n5+f/5ycnP/9/f3/dnZ2/2hoaP/9/f3/////////////////////////
///////////////////////////////////+/v7//v7+//7+/v/+/v7/////////////////////////
///9/f3/Xl5e/+rq6v/+/v7/sbGx/5eXl////////////5OTk/8BAQH/oKCg//39/f//////////////
////////////////////////////////////////////////////////////////////////////////
//////////////////+hoaH/AQEB/5OTk//+/v7//v7+/5aWlv+wsLD//v7+/+np6f9eXl7//f39////
///////////////////////////////////////////////////+/v7//v7+//7+/v//////////////
/////////////////////////v7+//39/f/9/f3//v7+/+3t7f/Z2dn///////////+enp7/Hh4e/11d
Xf/9/f3///////7+/v/+/v7//v7+////////////////////////////////////////////////////
///////////////////////////////////9/f3/XV1d/x4eHv+fn5///v7+//7+/v/Z2dn/7e3t//7+
/v/+/v7//f39//7+/v///////////////////////////////////////////////////////v7+//7+
/v/+/v7//v7+//7+/v/+/v7////////////////////////////////////////////+/v7//v7+////
////////t7e3/3R0dP9LS0v/0dHR//7+/v/+/v7//v7+//7+/v//////////////////////////////
//////////////////////////////////////////////7+/v/+/v7/0dHR/0tLS/9zc3P/t7e3////
////////////////////////////////////////////////////////////////////////////////
//////////////7+/v/+/v7//v7+//7+/v/+/v7//v7+////////////////////////////////////
/////////////////////////////9ra2v9ra2v/5+fn/1RUVP/c3Nz//v7+////////////////////
//////////////////////////////////////////////////////////////7+/v/9/f3/3Nzc/1RU
VP/o6Oj/a2tr/9ra2v//////////////////////////////////////////////////////////////
///////////////////////////////////+/v7//v7+//7+/v/+/v7//v7+////////////////////
///////////////////////////////////////////////////4+Pj/XV1d//z8/P/r6+v/bGxs/9HR
0f//////////////////////////////////////////////////////////////////////////////
///+/v7/0dHR/2tra//r6+v//f39/1xcXP/4+Pj/////////////////////////////////////////
///////////////////////////////////////////////////////////////////+/v7//v7+//7+
/v///////////////////////////////////////////////////////////////////////v7+/19f
X//8/Pz///////7+/v/8/Pz/////////////////////////////////////////////////////////
/////////////////////////v7+//z8/P/8/Pz//v7+//v7+/9gYGD//f39////////////////////
////////////////////////////////////////////////////////////////////////////////
/////////v7+//7+/v/+/v7///////////////////////////////////////7+/v/+/v7//v7+////
//////////////7+/v+4uLj/+fn5///////+/v7//v7+////////////////////////////////////
///////////////////////////////////////////////////+/v7//v7+//7+/v/5+fn/t7e3//39
/f//////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////v7+//7+/v/+/v7//v7+//7+
/v/+/v7//v7+//7+/v/////////////////+/v7//v7+//7+/v//////////////////////////////
////////////////////////////////////////////////////////////////////////////////
/////////v7+//7+/v/+/v7/////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////7+
/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
///////////////////+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v//////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////+/v7//v7+//7+/v/+/v7//v7+//7+
/v/+/v7/////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
/////////v7+//7+/v/+/v7/////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//////////////7+/v/+/v7//v7+//7+/v/+/v7//v7+////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
///+/v7//v7+////////////////////////////////////////////////////////////////////
///////////////////////////////////+/v7//v7+//7+/v/+/v7/////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
/////////////////////////v7+//7+/v//////////////////////////////////////////////
////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
</value>
</data>
</root>

+ 0
- 22
C#/Program.cs Просмотреть файл

@ -1,22 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace ServiceWrapper
{
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Start());
}
}
}

+ 0
- 69
C#/Properties/app.manifest Просмотреть файл

@ -1,69 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app" />
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<!-- UAC 清单选项
如果想要更改 Windows 用户帐户控制级别,请使用
以下节点之一替换 requestedExecutionLevel 节点。n
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
指定 requestedExecutionLevel 元素将禁用文件和注册表虚拟化。
如果你的应用程序需要此虚拟化来实现向后兼容性,则删除此
元素。
-->
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
</requestedPrivileges>
<applicationRequestMinimum>
<defaultAssemblyRequest permissionSetReference="Custom" />
<PermissionSet class="System.Security.PermissionSet" version="1" ID="Custom" SameSite="site" Unrestricted="true" />
</applicationRequestMinimum>
</security>
</trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- 设计此应用程序与其一起工作且已针对此应用程序进行测试的
Windows 版本的列表。取消评论适当的元素,
Windows 将自动选择最兼容的环境。 -->
<!-- Windows Vista -->
<!--<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" />-->
<!-- Windows 7 -->
<!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />-->
<!-- Windows 8 -->
<!--<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />-->
<!-- Windows 8.1 -->
<!--<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />-->
<!-- Windows 10 -->
<!--<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />-->
</application>
</compatibility>
<!-- 指示该应用程序可以感知 DPI 且 Windows 在 DPI 较高时将不会对其进行
自动缩放。Windows Presentation Foundation (WPF)应用程序自动感知 DPI,无需
选择加入。选择加入此设置的 Windows 窗体应用程序(目标设定为 .NET Framework 4.6 )还应
在其 app.config 中将 "EnableWindowsFormsHighDpiAutoResizing" 设置设置为 "true"。-->
<!--
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
</windowsSettings>
</application>
-->
<!-- 启用 Windows 公共控件和对话框的主题(Windows XP 和更高版本) -->
<!--
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
-->
</assembly>

ServiceWrapperEntry/.gitignore → C#/ServiceWrapperEntry/.gitignore Просмотреть файл


ServiceWrapperEntry/ServiceWrapperEntry.sln → C#/ServiceWrapperEntry/EasySpiderEntry.sln Просмотреть файл

@ -1,7 +1,7 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.29728.190
# Visual Studio Version 17
VisualStudioVersion = 17.3.32929.385
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ServiceWrapperEntry", "ServiceWrapperEntry\ServiceWrapperEntry.csproj", "{8FF781CB-5C33-4C3F-872D-1FE0E114A8D0}"
EndProject

ServiceWrapperEntry/Readme.md → C#/ServiceWrapperEntry/Readme.md Просмотреть файл


+ 2
- 0
C#/ServiceWrapperEntry/ServiceWrapperEntry/.gitignore Просмотреть файл

@ -0,0 +1,2 @@
obj/*
bin/*

C#/App.config → C#/ServiceWrapperEntry/ServiceWrapperEntry/App.config Просмотреть файл


ServiceWrapperEntry/ServiceWrapperEntry/Class1.cs → C#/ServiceWrapperEntry/ServiceWrapperEntry/Class1.cs Просмотреть файл

@ -12,7 +12,7 @@ using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
namespace ServiceWrapper
namespace EasySpider
{
public class MouseHelper
{

ServiceWrapperEntry/ServiceWrapperEntry/Flow.Designer.cs → C#/ServiceWrapperEntry/ServiceWrapperEntry/Flow.Designer.cs Просмотреть файл

@ -1,4 +1,4 @@
namespace ServiceWrapper
namespace EasySpider
{
partial class Flow
{
@ -39,20 +39,21 @@
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.panel1.AutoSize = true;
this.panel1.Location = new System.Drawing.Point(4, 6);
this.panel1.Margin = new System.Windows.Forms.Padding(6);
this.panel1.Location = new System.Drawing.Point(3, 4);
this.panel1.Margin = new System.Windows.Forms.Padding(4);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(1846, 1352);
this.panel1.Size = new System.Drawing.Size(1231, 845);
this.panel1.TabIndex = 0;
//
// button1
//
this.button1.AutoSize = true;
this.button1.Dock = System.Windows.Forms.DockStyle.Bottom;
this.button1.Font = new System.Drawing.Font("宋体", 16.125F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.button1.Location = new System.Drawing.Point(0, 1373);
this.button1.Font = new System.Drawing.Font("SimSun", 16.125F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.button1.Location = new System.Drawing.Point(0, 622);
this.button1.Margin = new System.Windows.Forms.Padding(2);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(1862, 53);
this.button1.Size = new System.Drawing.Size(1241, 37);
this.button1.TabIndex = 1;
this.button1.Text = "←";
this.button1.UseVisualStyleBackColor = true;
@ -61,15 +62,15 @@
//
// Flow
//
this.AutoScaleDimensions = new System.Drawing.SizeF(12F, 24F);
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(1862, 1426);
this.ClientSize = new System.Drawing.Size(1241, 659);
this.Controls.Add(this.button1);
this.Controls.Add(this.panel1);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Margin = new System.Windows.Forms.Padding(6);
this.Margin = new System.Windows.Forms.Padding(4);
this.Name = "Flow";
this.Text = "服务包装手动版";
this.Text = "EasySpider: NoCode Visual Web Crawler";
this.Load += new System.EventHandler(this.Flow_Load);
this.ResumeLayout(false);
this.PerformLayout();

ServiceWrapperEntry/ServiceWrapperEntry/Flow.cs → C#/ServiceWrapperEntry/ServiceWrapperEntry/Flow.cs Просмотреть файл

@ -13,7 +13,7 @@ using System.Runtime.InteropServices; //引用此名称空间,简化后面的
using System.Net;
using System.Diagnostics;
namespace ServiceWrapper
namespace EasySpider
{
public partial class Flow : Form, IMessageFilter

ServiceWrapperEntry/ServiceWrapperEntry/Flow.resx → C#/ServiceWrapperEntry/ServiceWrapperEntry/Flow.resx Просмотреть файл


ServiceWrapperEntry/ServiceWrapperEntry/Program.cs → C#/ServiceWrapperEntry/ServiceWrapperEntry/Program.cs Просмотреть файл

@ -6,7 +6,7 @@ using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace ServiceWrapper
namespace EasySpider
{
static class Program
{

C#/Properties/AssemblyInfo.cs → C#/ServiceWrapperEntry/ServiceWrapperEntry/Properties/AssemblyInfo.cs Просмотреть файл

@ -5,12 +5,12 @@ using System.Runtime.InteropServices;
// 有关程序集的一般信息由以下
// 控制。更改这些特性值可修改
// 与程序集关联的信息。
[assembly: AssemblyTitle("ServiceWrapper")]
[assembly: AssemblyDescription("服务包装手动版")]
[assembly: AssemblyTitle("EasySpider")]
[assembly: AssemblyDescription("Visual Web Crawler")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("浙江大学")]
[assembly: AssemblyProduct("服务包装器")]
[assembly: AssemblyCopyright("Copyright © 2020")]
[assembly: AssemblyCompany("Zhejiang University and National University of Singapore")]
[assembly: AssemblyProduct("Web Crawler")]
[assembly: AssemblyCopyright("Copyright © 2023")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

ServiceWrapperEntry/ServiceWrapperEntry/Properties/Resources.Designer.cs → C#/ServiceWrapperEntry/ServiceWrapperEntry/Properties/Resources.Designer.cs Просмотреть файл

@ -1,25 +1,25 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 运行时版本:4.0.30319.42000
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// 对此文件的更改可能会导致不正确的行为,并且如果
// 重新生成代码,这些更改将会丢失。
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace ServiceWrapper.Properties {
namespace EasySpider.Properties {
using System;
/// <summary>
/// 一个强类型的资源类,用于查找本地化的字符串等。
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// 此类是由 StronglyTypedResourceBuilder
// 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
// 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
// (以 /str 作为命令选项),或重新生成 VS 项目。
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
@ -33,13 +33,13 @@ namespace ServiceWrapper.Properties {
}
/// <summary>
/// 返回此类使用的缓存的 ResourceManager 实例。
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ServiceWrapper.Properties.Resources", typeof(Resources).Assembly);
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("EasySpider.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
@ -47,8 +47,8 @@ namespace ServiceWrapper.Properties {
}
/// <summary>
/// 重写当前线程的 CurrentUICulture 属性
/// 重写当前线程的 CurrentUICulture 属性。
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {

C#/Properties/Resources.resx → C#/ServiceWrapperEntry/ServiceWrapperEntry/Properties/Resources.resx Просмотреть файл


ServiceWrapperEntry/ServiceWrapperEntry/Properties/Settings.Designer.cs → C#/ServiceWrapperEntry/ServiceWrapperEntry/Properties/Settings.Designer.cs Просмотреть файл

@ -1,18 +1,18 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 运行时版本:4.0.30319.42000
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// 对此文件的更改可能会导致不正确的行为,并且如果
// 重新生成代码,这些更改将会丢失。
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace ServiceWrapper.Properties {
namespace EasySpider.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.4.0.0")]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.3.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));

C#/Properties/Settings.settings → C#/ServiceWrapperEntry/ServiceWrapperEntry/Properties/Settings.settings Просмотреть файл


C#/PublicVariable.cs → C#/ServiceWrapperEntry/ServiceWrapperEntry/PublicVariable.cs Просмотреть файл

@ -17,7 +17,7 @@ using Newtonsoft.Json;
using System.Runtime.InteropServices;
using System.Diagnostics;
namespace ServiceWrapper
namespace EasySpider
{
class PublicVariable
{
@ -26,5 +26,7 @@ namespace ServiceWrapper
public static Start start = null;
public static Flow fr = null;
public static Process chrome = null;
public static string frontEndAddress = "https://servicewrapper.systems";
public static string backEndAddress = "https://servicewrapper.systems";
}
}

ServiceWrapperEntry/ServiceWrapperEntry/ServiceWrapperEntry.csproj → C#/ServiceWrapperEntry/ServiceWrapperEntry/ServiceWrapperEntry.csproj Просмотреть файл

@ -10,8 +10,8 @@
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{8FF781CB-5C33-4C3F-872D-1FE0E114A8D0}</ProjectGuid>
<OutputType>WinExe</OutputType>
<RootNamespace>ServiceWrapper</RootNamespace>
<AssemblyName>ServiceWrapper</AssemblyName>
<RootNamespace>EasySpider</RootNamespace>
<AssemblyName>EasySpider</AssemblyName>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>

ServiceWrapperEntry/ServiceWrapperEntry/ServiceWrapperEntry.csproj.user → C#/ServiceWrapperEntry/ServiceWrapperEntry/ServiceWrapperEntry.csproj.user Просмотреть файл


C#/Start.Designer.cs → C#/ServiceWrapperEntry/ServiceWrapperEntry/Start.Designer.cs Просмотреть файл

@ -1,4 +1,4 @@
namespace ServiceWrapper
namespace EasySpider
{
partial class Start
{
@ -40,58 +40,58 @@
this.button1.Location = new System.Drawing.Point(60, 66);
this.button1.Margin = new System.Windows.Forms.Padding(4);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(196, 75);
this.button1.Size = new System.Drawing.Size(322, 75);
this.button1.TabIndex = 1;
this.button1.Text = "包装/修改/查看服务";
this.button1.Text = "Design Task";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(15, 29);
this.label1.Location = new System.Drawing.Point(41, 29);
this.label1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(88, 16);
this.label1.Size = new System.Drawing.Size(89, 20);
this.label1.TabIndex = 2;
this.label1.Text = "程序状态:";
this.label1.Text = "Status: ";
//
// State
//
this.State.AutoSize = true;
this.State.Location = new System.Drawing.Point(102, 29);
this.State.Location = new System.Drawing.Point(113, 30);
this.State.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.State.Name = "State";
this.State.Size = new System.Drawing.Size(200, 16);
this.State.Size = new System.Drawing.Size(289, 20);
this.State.TabIndex = 3;
this.State.Text = "请点击相应操作按钮使用。";
this.State.Text = "Click Button below to start.";
//
// button2
//
this.button2.Location = new System.Drawing.Point(60, 163);
this.button2.Margin = new System.Windows.Forms.Padding(4);
this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(196, 75);
this.button2.Size = new System.Drawing.Size(322, 75);
this.button2.TabIndex = 4;
this.button2.Text = "查看/调用/删除服务";
this.button2.Text = "View/Manage/Invoke Tasks";
this.button2.UseVisualStyleBackColor = true;
this.button2.Click += new System.EventHandler(this.button2_Click);
//
// Start
//
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 20F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(340, 260);
this.ClientSize = new System.Drawing.Size(455, 260);
this.Controls.Add(this.button2);
this.Controls.Add(this.State);
this.Controls.Add(this.label1);
this.Controls.Add(this.button1);
this.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.Font = new System.Drawing.Font("SimSun", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Margin = new System.Windows.Forms.Padding(4);
this.MaximizeBox = false;
this.Name = "Start";
this.Text = "面向Web资源的服务封装系统";
this.Text = "EasySpider: NoCode Visual Web Crawler";
this.Load += new System.EventHandler(this.Start_Load);
this.ResumeLayout(false);
this.PerformLayout();

ServiceWrapperEntry/ServiceWrapperEntry/Start.cs → C#/ServiceWrapperEntry/ServiceWrapperEntry/Start.cs Просмотреть файл

@ -18,7 +18,7 @@ using System.Runtime.InteropServices;
using System.Diagnostics;
using System.Threading;
namespace ServiceWrapper
namespace EasySpider
{
public partial class Start : Form
{
@ -73,7 +73,7 @@ namespace ServiceWrapper
{
socke.OnOpen = () =>
{
BeginInvoke(new ConnectionChange(ModifyState), new object[] { "与浏览器连接已建立,请使用。" });
BeginInvoke(new ConnectionChange(ModifyState), new object[] { "Connected to the browser, can start now." });
};
socke.OnClose = () =>
{
@ -129,7 +129,7 @@ namespace ServiceWrapper
}
catch (Exception)
{
MessageBox.Show("输入模块初始化失败,请退出360之类的安全软件!");
MessageBox.Show("Initialization failed, please quit anti-virus softwares such as 360!");
Application.Exit();
}
}
@ -193,7 +193,7 @@ namespace ServiceWrapper
}
catch (Exception)
{
MessageBox.Show("输入失败,请退出360之类的安全软件!");
MessageBox.Show("Input form/textbox failed, please quit anti-virus softwares such as 360!");
}
}
@ -210,7 +210,7 @@ namespace ServiceWrapper
}
else if (msg.type == 5)
{
string FileName = Application.StartupPath + @"/Chrome/ServiceWrapper_ExcuteStage.exe"; //启动的应用程序名称
string FileName = Application.StartupPath + @"/Chrome/easyspider_executestage.exe"; //启动的应用程序名称
string arguments = msg.message.id.ToString() + " " + PublicVariable.backEndAddress;
Process.Start(FileName, arguments); //启动执行程序
}
@ -232,9 +232,9 @@ namespace ServiceWrapper
fr = new Flow(); //先创造流程图界面,暂时隐藏不显示
fr.Show();
fr.Hide();
State.Text = "加载中……";
State.Text = "Loading...";
ChromeOptions options = new ChromeOptions();
options.AddExtension(Application.StartupPath + @"/ServiceWrapper.crx");
options.AddExtension(Application.StartupPath + @"/EasySpider.crx");
browser = new ChromeDriver(Application.StartupPath +@"/Chrome", options);
browser.Navigate().GoToUrl(serviceListUrl); //默认可以修改服务
//ProcessStartInfo startInfo = new ProcessStartInfo();

C#/Start.resx → C#/ServiceWrapperEntry/ServiceWrapperEntry/Start.resx Просмотреть файл


C#/favicon.ico → C#/ServiceWrapperEntry/ServiceWrapperEntry/favicon.ico Просмотреть файл


C#/packages.config → C#/ServiceWrapperEntry/ServiceWrapperEntry/packages.config Просмотреть файл


+ 0
- 255
C#/Start.cs Просмотреть файл

@ -1,255 +0,0 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Interactions;
using OpenQA.Selenium.Internal;
using OpenQA.Selenium.Support;
using Fleck;
using Newtonsoft.Json;
using System.Runtime.InteropServices;
using System.Diagnostics;
using System.Threading;
namespace ServiceWrapper
{
public partial class Start : Form
{
public static IWebDriver browser;
public static IWebSocketConnection socket_start; //输入网址页面的socket
public static IWebSocketConnection socket_window; //正式使用的窗口的socket
public static IWebSocketConnection socket_flowchart; //流程图的socket
public static WebSocketServer server;
public static IntPtr chromeId;
public static string[] links;
public Flow fr;
public string serviceListUrl = "http://183.129.170.180:8041/frontEnd/serviceList.html";
[System.Runtime.InteropServices.DllImportAttribute("user32.dll", EntryPoint = "MoveWindow")]
public static extern bool MoveWindow(System.IntPtr hWnd, int X, int Y, int nWidth, int nHeight, bool bRepaint);
[DllImport("user32.dll")]
public static extern IntPtr GetForegroundWindow();
[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern int SetForegroundWindow(IntPtr hwnd);
[DllImport("user32", EntryPoint = "GetWindowThreadProcessId")]
private static extern int GetWindowThreadProcessId(IntPtr hwnd, out int pid);
[DllImport("user32.dll", EntryPoint = "SendMessage", SetLastError = true, CharSet = CharSet.Auto)]
private static extern int SendMessage(IntPtr hwnd, uint wMsg, int wParam, int lParam);
[DllImport("user32.dll")]
private extern static bool SwapMouseButton(bool fSwap);
[DllImport("user32.dll", SetLastError = true)]
static extern void SwitchToThisWindow(IntPtr hWnd, bool fAltTab);
[DllImport("user32.dll", EntryPoint = "ShowWindow", CharSet = CharSet.Auto)]
public static extern int ShowWindow(IntPtr hwnd, int nCmdShow);
const int WM_SYSCOMMAND = 0x0112;
const int SC_CLOSE = 0xF060;
const int SC_MINIMIZE = 0xF020;
const int SC_MAXIMIZE = 0xF030;
const int SC_RESTORE = 0xF120;
public Start()
{
InitializeComponent();
PublicVariable.start = this;
}
private void Start_Load(object sender, EventArgs e)
{
//string title = (string)Scripts().ExecuteScript("return document.title");
server = new WebSocketServer("ws://0.0.0.0:8084");
server.Start(socke =>
{
socke.OnOpen = () =>
{
BeginInvoke(new ConnectionChange(ModifyState), new object[] { "与浏览器连接已建立,请使用。" });
};
socke.OnClose = () =>
{
//BeginInvoke(new ConnectionChange(ModifyState), new object[] { "与浏览器连接已断开。" });
};
socke.OnMessage = message =>
{
Msg msg = JsonConvert.DeserializeObject<Msg>(message);//result为上面的Json数据
//处理连接操作
if (msg.type == 0)//如果是第一次连接操作,设定socket
{
if (msg.message.id == 0)
{
socket_window = socke;
Console.WriteLine("Socket Window Connected.");
}
else if (msg.message.id == 1)
{
socket_start = socke;
Console.WriteLine("Socket Start Connected.");
}
else
{
socket_flowchart = socke;
Console.WriteLine("Socket Flowchart Connected.");
//发送打开网页指令
//FlowMessage fmsg = JsonConvert.DeserializeObject<FlowMessage>("{\"type\":0,\"data\":{\"option\":1,\"parameters\":{\"url\":\"https://www.baidu.com\"}}}");
//fmsg.data.parameters.url = links[0];
//string json = JsonConvert.SerializeObject(fmsg);
//socket_flowchart.Send(json);
}
}
else //其他情况放在进程外处理
{
try
{
BeginInvoke(new GetMessage(HandleEvent), new object[] { message });
}
catch (Exception)
{
throw;
}
}
};
});
try
{
SendKeys.Send("+");
SendKeys.Send("+"); //测试是否能正常使用输入模块
}
catch (Exception)
{
MessageBox.Show("输入模块初始化失败,请退出360之类的安全软件!");
Application.Exit();
}
}
delegate void ConnectionChange(object input);//委托
delegate void GetMessage(object input);
//正式处理程序入口
public void HandleEvent(object input)
{
Msg msg = JsonConvert.DeserializeObject<Msg>(input.ToString());//result为上面的Json数据
if (msg.type == 1) //开始的时候输入网址
{
chromeId = GetForegroundWindow(); //记录下所在浏览器的进程Id号
Console.WriteLine(chromeId);
Console.WriteLine();
//links = msg.message.links.Split(new string[] { "\n" }, StringSplitOptions.None);
//List<string> list = links.ToList();
//int l = links.Length;
//if (links[l - 1].Length == 0)//如果最后一行是空行则删掉
//{
// list.RemoveAt(l - 1);
//}
//links = list.ToArray();
//if (browser != null)
//{
// browser.Navigate().GoToUrl(links[0]);
//}
int width = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Size.Width;
int height = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Size.Height;
SendMessage(chromeId, WM_SYSCOMMAND, SC_RESTORE, 0); // 最大化
MoveWindow(chromeId, 0, Convert.ToInt32(height * PublicVariable.ratio) - 120, width, 120 + Convert.ToInt32(height * (1.0 - PublicVariable.ratio)), true);
if(fr!=null)
{
if (msg.message.id != -1) //读取服务流程,不是新增的时候
{
fr.chromeBrowser.Load(Flow.flowChartUrl + msg.message.id.ToString());
}
//SwapMouseButton(true);
fr.Show();
}
Hide();
//SwitchToThisWindow(chromeId,true);
//ShowWindow(System.UIntPtr(browser.CurrentWindowHandle),2);
SetForegroundWindow(Start.chromeId); //打开流程图窗口后将chrome窗口显示到最前方
SetForegroundWindow(Handle); //打开流程图窗口后将chrome窗口显示到最前方
SetForegroundWindow(Start.chromeId); //打开流程图窗口后将chrome窗口显示到最前方
//MouseHelper.SetCursorPos(400, Convert.ToInt32(height * PublicVariable.ratio) - 110);
//MouseHelper.mouse_event(MouseHelper.MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0);
//Thread.Sleep(50);
//MouseHelper.mouse_event(MouseHelper.MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0);
}
else if (msg.type == 2)
{
try
{
SendKeys.Send(msg.message.keyboardStr);
SendKeys.Send("+");
SendKeys.Send("+"); //两个shift是为了防止有人按用中文输入法输入了英文按了回车,这样切换两次输入法就可以达到效果
}
catch (Exception)
{
MessageBox.Show("输入失败,请退出360之类的安全软件!");
}
}
else if (msg.type == 3)
{
if (msg.from == 0)
{
socket_flowchart.Send(msg.message.pipe); //直接把消息转接
}
else
{
socket_window.Send(msg.message.pipe);
}
}
else if (msg.type == 5)
{
string FileName = Application.StartupPath + @"/Chrome/ServiceWrapper_ExcuteStage.exe"; //启动的应用程序名称
Process.Start(FileName, msg.message.id.ToString()); //启动执行程序
}
}
public void ModifyState(object input)
{
State.Text = (string)input;
}
public static IJavaScriptExecutor Scripts()
{
return (IJavaScriptExecutor)browser;
}
private void button1_Click(object sender, EventArgs e)
{
fr = new Flow(); //先创造流程图界面,暂时隐藏不显示
fr.Show();
fr.Hide();
State.Text = "加载中……";
ChromeOptions options = new ChromeOptions();
options.AddExtension(Application.StartupPath + @"/ServiceWrapper.crx");
browser = new ChromeDriver(Application.StartupPath +@"/Chrome", options);
browser.Navigate().GoToUrl(serviceListUrl); //默认可以修改服务
//ProcessStartInfo startInfo = new ProcessStartInfo();
//startInfo.FileName = Application.StartupPath + @"/Chrome/chrome.exe"; //启动的应用程序名称
//SwapMouseButton(false);//此时此刻的鼠标应该是默认状态
//PublicVariable.chrome = Process.Start(startInfo);
//browser.Navigate().GoToUrl("file:///Start.html");
}
private void button2_Click(object sender, EventArgs e)
{
Flow fr2 = new Flow(serviceListUrl+"?type=1"); //加载的页面不可增加和修改服务
fr2.closedriver = false;
fr2.WindowState = FormWindowState.Maximized; //最大化窗口
fr2.Show();
Hide();
}
}
}

+ 0
- 189
C#/WindowsFormsApp4.csproj Просмотреть файл

@ -1,189 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\packages\CefSharp.WinForms.79.1.350\build\CefSharp.WinForms.props" Condition="Exists('..\packages\CefSharp.WinForms.79.1.350\build\CefSharp.WinForms.props')" />
<Import Project="..\packages\CefSharp.Common.79.1.350\build\CefSharp.Common.props" Condition="Exists('..\packages\CefSharp.Common.79.1.350\build\CefSharp.Common.props')" />
<Import Project="..\packages\cef.redist.x86.79.1.35\build\cef.redist.x86.props" Condition="Exists('..\packages\cef.redist.x86.79.1.35\build\cef.redist.x86.props')" />
<Import Project="..\packages\cef.redist.x64.79.1.35\build\cef.redist.x64.props" Condition="Exists('..\packages\cef.redist.x64.79.1.35\build\cef.redist.x64.props')" />
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{8FF781CB-5C33-4C3F-872D-1FE0E114A8D0}</ProjectGuid>
<OutputType>WinExe</OutputType>
<RootNamespace>ServiceWrapper</RootNamespace>
<AssemblyName>ServiceWrapper</AssemblyName>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'ServiceWrapper|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'ServiceWrapper|x64' ">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x64\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x64</PlatformTarget>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
<OutputPath>bin\x64\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x64</PlatformTarget>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup>
<ApplicationIcon>favicon.ico</ApplicationIcon>
</PropertyGroup>
<PropertyGroup>
<TargetZone>LocalIntranet</TargetZone>
</PropertyGroup>
<PropertyGroup>
<GenerateManifests>false</GenerateManifests>
</PropertyGroup>
<PropertyGroup>
<ApplicationManifest>Properties\app.manifest</ApplicationManifest>
</PropertyGroup>
<ItemGroup>
<Reference Include="Fleck, Version=1.1.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Fleck.1.1.0\lib\net45\Fleck.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.12.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
<Reference Include="WebDriver, Version=3.141.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Selenium.WebDriver.3.141.0\lib\net45\WebDriver.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="Class1.cs" />
<Compile Include="Flow.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Flow.Designer.cs">
<DependentUpon>Flow.cs</DependentUpon>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="PublicVariable.cs" />
<Compile Include="Start.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Start.Designer.cs">
<DependentUpon>Start.cs</DependentUpon>
</Compile>
<EmbeddedResource Include="Flow.resx">
<DependentUpon>Flow.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
<EmbeddedResource Include="Start.resx">
<DependentUpon>Start.cs</DependentUpon>
</EmbeddedResource>
<None Include="packages.config" />
<None Include="Properties\app.manifest" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<Content Include="favicon.ico" />
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include=".NETFramework,Version=v4.7.2">
<Visible>False</Visible>
<ProductName>Microsoft .NET Framework 4.7.2 %28x86 和 x64%29</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>false</Install>
</BootstrapperPackage>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息,请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\cef.redist.x64.79.1.35\build\cef.redist.x64.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\cef.redist.x64.79.1.35\build\cef.redist.x64.props'))" />
<Error Condition="!Exists('..\packages\cef.redist.x86.79.1.35\build\cef.redist.x86.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\cef.redist.x86.79.1.35\build\cef.redist.x86.props'))" />
<Error Condition="!Exists('..\packages\CefSharp.Common.79.1.350\build\CefSharp.Common.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\CefSharp.Common.79.1.350\build\CefSharp.Common.props'))" />
<Error Condition="!Exists('..\packages\CefSharp.Common.79.1.350\build\CefSharp.Common.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\CefSharp.Common.79.1.350\build\CefSharp.Common.targets'))" />
<Error Condition="!Exists('..\packages\CefSharp.WinForms.79.1.350\build\CefSharp.WinForms.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\CefSharp.WinForms.79.1.350\build\CefSharp.WinForms.props'))" />
<Error Condition="!Exists('..\packages\CefSharp.WinForms.79.1.350\build\CefSharp.WinForms.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\CefSharp.WinForms.79.1.350\build\CefSharp.WinForms.targets'))" />
</Target>
<Import Project="..\packages\CefSharp.Common.79.1.350\build\CefSharp.Common.targets" Condition="Exists('..\packages\CefSharp.Common.79.1.350\build\CefSharp.Common.targets')" />
<Import Project="..\packages\CefSharp.WinForms.79.1.350\build\CefSharp.WinForms.targets" Condition="Exists('..\packages\CefSharp.WinForms.79.1.350\build\CefSharp.WinForms.targets')" />
</Project>

+ 0
- 13
C#/WindowsFormsApp4.csproj.user Просмотреть файл

@ -1,13 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<PublishUrlHistory>publish\</PublishUrlHistory>
<InstallUrlHistory />
<SupportUrlHistory />
<UpdateUrlHistory />
<BootstrapperUrlHistory />
<ErrorReportUrlHistory />
<FallbackCulture>zh-CN</FallbackCulture>
<VerifyUploadedFiles>false</VerifyUploadedFiles>
</PropertyGroup>
</Project>

Двоичные данные
C#/shortcut/.vs/shortcut/FileContentIndex/23f98718-32b2-4c38-b5b9-aa3fd9241e3a.vsidx Просмотреть файл


Двоичные данные
C#/shortcut/.vs/shortcut/FileContentIndex/392fedf3-4ef0-474a-95e3-6021f9c8513e.vsidx Просмотреть файл


Двоичные данные
C#/shortcut/.vs/shortcut/FileContentIndex/7456acef-50d7-43b8-aef3-f3c1a9799585.vsidx Просмотреть файл


Extension/ServiceWrapper/styles/devtools.css → C#/shortcut/.vs/shortcut/FileContentIndex/read.lock Просмотреть файл


Двоичные данные
C#/shortcut/.vs/shortcut/v17/.suo Просмотреть файл


+ 25
- 0
C#/shortcut/shortcut.sln Просмотреть файл

@ -0,0 +1,25 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.3.32929.385
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "shortcut", "shortcut\shortcut.csproj", "{F7286090-1B9A-456C-A0C6-DB86E17C3C47}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{F7286090-1B9A-456C-A0C6-DB86E17C3C47}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F7286090-1B9A-456C-A0C6-DB86E17C3C47}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F7286090-1B9A-456C-A0C6-DB86E17C3C47}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F7286090-1B9A-456C-A0C6-DB86E17C3C47}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {36A0EC28-3049-411D-AB6F-B20A562EE31D}
EndGlobalSection
EndGlobal

ServiceWrapperEntry/ServiceWrapperEntry/App.config → C#/shortcut/shortcut/App.config Просмотреть файл


+ 48
- 0
C#/shortcut/shortcut/Form1.Designer.cs Просмотреть файл

@ -0,0 +1,48 @@
namespace shortcut
{
partial class Form1
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.SuspendLayout();
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 450);
this.Name = "Form1";
this.Text = "Form1";
this.Load += new System.EventHandler(this.Form1_Load);
this.ResumeLayout(false);
}
#endregion
}
}

+ 26
- 0
C#/shortcut/shortcut/Form1.cs Просмотреть файл

@ -0,0 +1,26 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace shortcut
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
this.Hide();
Application.Exit();
}
}
}

+ 120
- 0
C#/shortcut/shortcut/Form1.resx Просмотреть файл

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

+ 28
- 0
C#/shortcut/shortcut/Program.cs Просмотреть файл

@ -0,0 +1,28 @@
using System.Diagnostics;
using System.IO;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace shortcut
{
internal static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
if (new DirectoryInfo(Application.StartupPath + "\\EasySpider\\").Exists)
Process.Start(Application.StartupPath + "\\EasySpider\\EasySpider.exe");
else
Process.Start(Application.StartupPath + "\\Debug\\EasySpider.exe");
}
}
}

+ 36
- 0
C#/shortcut/shortcut/Properties/AssemblyInfo.cs Просмотреть файл

@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("shortcut")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("shortcut")]
[assembly: AssemblyCopyright("Copyright © 2023")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("f7286090-1b9a-456c-a0c6-db86e17c3c47")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

C#/Properties/Resources.Designer.cs → C#/shortcut/shortcut/Properties/Resources.Designer.cs Просмотреть файл

@ -1,61 +1,69 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 运行时版本:4.0.30319.42000
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// 对此文件的更改可能会导致不正确的行为,并且如果
// 重新生成代码,这些更改将会丢失。
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace ServiceWrapper.Properties {
using System;
namespace shortcut.Properties
{
/// <summary>
/// 一个强类型的资源类,用于查找本地化的字符串等。
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// 此类是由 StronglyTypedResourceBuilder
// 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
// 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
// (以 /str 作为命令选项),或重新生成 VS 项目。
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
internal class Resources
{
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
internal Resources()
{
}
/// <summary>
/// 返回此类使用的缓存的 ResourceManager 实例。
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ServiceWrapper.Properties.Resources", typeof(Resources).Assembly);
internal static global::System.Resources.ResourceManager ResourceManager
{
get
{
if ((resourceMan == null))
{
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("shortcut.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// 重写当前线程的 CurrentUICulture 属性
/// 重写当前线程的 CurrentUICulture 属性。
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
internal static global::System.Globalization.CultureInfo Culture
{
get
{
return resourceCulture;
}
set {
set
{
resourceCulture = value;
}
}

ServiceWrapperEntry/ServiceWrapperEntry/Properties/Resources.resx → C#/shortcut/shortcut/Properties/Resources.resx Просмотреть файл


C#/Properties/Settings.Designer.cs → C#/shortcut/shortcut/Properties/Settings.Designer.cs Просмотреть файл

@ -1,24 +1,28 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 运行时版本:4.0.30319.42000
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// 对此文件的更改可能会导致不正确的行为,并且如果
// 重新生成代码,这些更改将会丢失。
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace ServiceWrapper.Properties {
namespace shortcut.Properties
{
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.4.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
{
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get {
public static Settings Default
{
get
{
return defaultInstance;
}
}

ServiceWrapperEntry/ServiceWrapperEntry/Properties/Settings.settings → C#/shortcut/shortcut/Properties/Settings.settings Просмотреть файл


+ 6
- 0
C#/shortcut/shortcut/bin/Debug/shortcut.exe.config Просмотреть файл

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
</configuration>

Двоичные данные
C#/shortcut/shortcut/bin/Debug/shortcut.pdb Просмотреть файл


+ 6
- 0
C#/shortcut/shortcut/bin/Release/EasySpider_ShortCut.exe.config Просмотреть файл

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
</configuration>

Двоичные данные
C#/shortcut/shortcut/bin/Release/EasySpider_ShortCut.pdb Просмотреть файл


ServiceWrapperEntry/ServiceWrapperEntry/favicon.ico → C#/shortcut/shortcut/favicon.ico Просмотреть файл


+ 4
- 0
C#/shortcut/shortcut/obj/Debug/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs Просмотреть файл

@ -0,0 +1,4 @@
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]

Двоичные данные
C#/shortcut/shortcut/obj/Debug/DesignTimeResolveAssemblyReferences.cache Просмотреть файл


Двоичные данные
C#/shortcut/shortcut/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache Просмотреть файл


Двоичные данные
C#/shortcut/shortcut/obj/Debug/shortcut.Form1.resources Просмотреть файл


Двоичные данные
C#/shortcut/shortcut/obj/Debug/shortcut.Properties.Resources.resources Просмотреть файл


Двоичные данные
C#/shortcut/shortcut/obj/Debug/shortcut.csproj.AssemblyReference.cache Просмотреть файл


+ 1
- 0
C#/shortcut/shortcut/obj/Debug/shortcut.csproj.CoreCompileInputs.cache Просмотреть файл

@ -0,0 +1 @@
8069502011d0681850e57a53d5a1673222f430a6

+ 11
- 0
C#/shortcut/shortcut/obj/Debug/shortcut.csproj.FileListAbsolute.txt Просмотреть файл

@ -0,0 +1,11 @@
C:\Users\q9823\source\repos\shortcut\shortcut\obj\Debug\shortcut.csproj.AssemblyReference.cache
C:\Users\q9823\source\repos\shortcut\shortcut\obj\Debug\shortcut.csproj.SuggestedBindingRedirects.cache
C:\Users\q9823\source\repos\shortcut\shortcut\obj\Debug\shortcut.Form1.resources
C:\Users\q9823\source\repos\shortcut\shortcut\obj\Debug\shortcut.Properties.Resources.resources
C:\Users\q9823\source\repos\shortcut\shortcut\obj\Debug\shortcut.csproj.GenerateResource.cache
C:\Users\q9823\source\repos\shortcut\shortcut\obj\Debug\shortcut.csproj.CoreCompileInputs.cache
C:\Users\q9823\source\repos\shortcut\shortcut\bin\Debug\shortcut.exe.config
C:\Users\q9823\source\repos\shortcut\shortcut\bin\Debug\shortcut.exe
C:\Users\q9823\source\repos\shortcut\shortcut\bin\Debug\shortcut.pdb
C:\Users\q9823\source\repos\shortcut\shortcut\obj\Debug\shortcut.exe
C:\Users\q9823\source\repos\shortcut\shortcut\obj\Debug\shortcut.pdb

Двоичные данные
C#/shortcut/shortcut/obj/Debug/shortcut.csproj.GenerateResource.cache Просмотреть файл


Extension/ServiceWrapper/styles/options.css → C#/shortcut/shortcut/obj/Debug/shortcut.csproj.SuggestedBindingRedirects.cache Просмотреть файл


Двоичные данные
C#/shortcut/shortcut/obj/Debug/shortcut.pdb Просмотреть файл


+ 4
- 0
C#/shortcut/shortcut/obj/Release/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs Просмотреть файл

@ -0,0 +1,4 @@
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]

Двоичные данные
C#/shortcut/shortcut/obj/Release/DesignTimeResolveAssemblyReferencesInput.cache Просмотреть файл


Двоичные данные
C#/shortcut/shortcut/obj/Release/EasySpider_ShortCut.pdb Просмотреть файл


Двоичные данные
C#/shortcut/shortcut/obj/Release/shortcut.Form1.resources Просмотреть файл


Двоичные данные
C#/shortcut/shortcut/obj/Release/shortcut.Properties.Resources.resources Просмотреть файл


Двоичные данные
C#/shortcut/shortcut/obj/Release/shortcut.csproj.AssemblyReference.cache Просмотреть файл


+ 1
- 0
C#/shortcut/shortcut/obj/Release/shortcut.csproj.CoreCompileInputs.cache Просмотреть файл

@ -0,0 +1 @@
a05b2efad1c492f69cfd9e73a7de2300da2b5b0d

+ 11
- 0
C#/shortcut/shortcut/obj/Release/shortcut.csproj.FileListAbsolute.txt Просмотреть файл

@ -0,0 +1,11 @@
C:\Users\q9823\source\repos\shortcut\shortcut\obj\Release\shortcut.csproj.AssemblyReference.cache
C:\Users\q9823\source\repos\shortcut\shortcut\obj\Release\shortcut.csproj.SuggestedBindingRedirects.cache
C:\Users\q9823\source\repos\shortcut\shortcut\obj\Release\shortcut.Form1.resources
C:\Users\q9823\source\repos\shortcut\shortcut\obj\Release\shortcut.Properties.Resources.resources
C:\Users\q9823\source\repos\shortcut\shortcut\obj\Release\shortcut.csproj.GenerateResource.cache
C:\Users\q9823\source\repos\shortcut\shortcut\obj\Release\shortcut.csproj.CoreCompileInputs.cache
C:\Users\q9823\source\repos\shortcut\shortcut\bin\Release\EasySpider_ShortCut.exe.config
C:\Users\q9823\source\repos\shortcut\shortcut\bin\Release\EasySpider_ShortCut.exe
C:\Users\q9823\source\repos\shortcut\shortcut\bin\Release\EasySpider_ShortCut.pdb
C:\Users\q9823\source\repos\shortcut\shortcut\obj\Release\EasySpider_ShortCut.exe
C:\Users\q9823\source\repos\shortcut\shortcut\obj\Release\EasySpider_ShortCut.pdb

Двоичные данные
C#/shortcut/shortcut/obj/Release/shortcut.csproj.GenerateResource.cache Просмотреть файл


Extension/ServiceWrapper/styles/popup.css → C#/shortcut/shortcut/obj/Release/shortcut.csproj.SuggestedBindingRedirects.cache Просмотреть файл


+ 89
- 0
C#/shortcut/shortcut/shortcut.csproj Просмотреть файл

@ -0,0 +1,89 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{F7286090-1B9A-456C-A0C6-DB86E17C3C47}</ProjectGuid>
<OutputType>WinExe</OutputType>
<RootNamespace>shortcut</RootNamespace>
<AssemblyName>EasySpider_ShortCut</AssemblyName>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup>
<ApplicationIcon>favicon.ico</ApplicationIcon>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Form1.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Form1.Designer.cs">
<DependentUpon>Form1.cs</DependentUpon>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="Form1.resx">
<DependentUpon>Form1.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<Content Include="favicon.ico" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

ExecuteStage/all_data.xls → Examples/Sample Просмотреть файл


ExecuteStage/author_crawl.py → Examples/Sample Просмотреть файл


sks/author_list.csv
Разница между файлами не показана из-за своего большого размера
Просмотреть файл


ExecuteStage/desc_crawl.py → Examples/Sample Просмотреть файл


ExecuteStage/list.xlsx → Examples/Sample Просмотреть файл


ExecuteStage/main.py → Examples/Sample Просмотреть файл


Examples/Sample → sks/raw_data.csv Просмотреть файл


ExecuteStage/tianyancha.py → Examples/Sample Просмотреть файл


sks/关键词
Разница между файлами не показана из-за своего большого размера
Просмотреть файл


Examples/Sample → sks/关键词.CSV Просмотреть файл

@ -0,0 +1 @@
电商实战运营

+ 0
- 1
ExecuteStage/Readme.md Просмотреть файл

@ -1,2 +1 @@
pyinstaller -F --icon=favicon.ico ServiceWrapper_ExcuteStage.py
出现permission denied请关闭杀毒软件

ExecuteStage/ServiceWrapper_ExecuteStage.py → ExecuteStage/easyspider_executestage.py Просмотреть файл

@ -65,7 +65,7 @@ def scrollDown(para, rt=""):
if para["scrollType"] != 0 and para["scrollCount"] > 0: # 控制屏幕向下滚动
for i in range(para["scrollCount"]):
time.sleep(1) # 下拉完等1秒
Log("下拉完等待1秒")
Log("Wait for 1 second after screen scrolling")
body = browser.find_element(By.CSS_SELECTOR, "body")
if para["scrollType"] == 1:
body.send_keys(Keys.PGDN)
@ -78,7 +78,7 @@ def scrollDown(para, rt=""):
if para["scrollType"] != 0 and para["scrollCount"] > 0: # 控制屏幕向下滚动
for i in range(para["scrollCount"]):
time.sleep(1) # 下拉完等1秒
Log("下拉完等待1秒")
Log("Wait for 1 second after screen scrolling")
body = browser.find_element(By.CSS_SELECTOR, "body")
if para["scrollType"] == 1:
body.send_keys(Keys.PGDN)
@ -124,12 +124,12 @@ def excuteNode(nodeId, loopValue="", clickPath="", index=0):
if node["parameters"]["wait"] > 1:
waitTime = node["parameters"]["wait"]
time.sleep(waitTime)
Log("Node执行完后等待:", waitTime)
Log("Wait seconds after node executing: ", waitTime)
# 对判断条件的处理
def judgeExcute(node, loopElement, clickPath="", index=0):
rt = Time("条件判断")
rt = Time("IF Condition")
global bodyText # 引入bodyText
excuteBranchId = 0 # 要执行的BranchId
for i in node["sequence"]:
@ -173,7 +173,8 @@ def judgeExcute(node, loopElement, clickPath="", index=0):
# 对循环的处理
def loopExcute(node, loopValue, clickPath="", index=0):
time.sleep(0.1) # 第一次执行循环的时候强制等待1秒
Log("循环执行前等待0.1秒")
# Log("循环执行前等待0.1秒")
Log("Wait 0.1 second before loop")
global history
thisHandle = browser.current_window_handle # 记录本次循环内的标签页的ID
thisHistoryLength = browser.execute_script(
@ -216,8 +217,8 @@ def loopExcute(node, loopValue, clickPath="", index=0):
break # 如果找不到元素,退出循环
count = count + 1
Log("页数:", count)
recordLog("页数:" + str(count))
Log("Page: ", count)
recordLog("Page:" + str(count))
# print(node["parameters"]["exitCount"], "-------")
if node["parameters"]["exitCount"] == count: # 如果达到设置的退出循环条件的话
break
@ -245,7 +246,9 @@ def loopExcute(node, loopValue, clickPath="", index=0):
time.sleep(node["parameters"]["historyWait"])
else:
time.sleep(2)
Log("切换历史记录等待2秒或者:", node["parameters"]["historyWait"])
# 切换历史记录等待2秒或者:
Log("Change history back time or:",
node["parameters"]["historyWait"])
browser.execute_script('window.stop()')
except NoSuchElementException:
Log("pathNotFound: ", node["parameters"]["xpath"])
@ -275,7 +278,8 @@ def loopExcute(node, loopValue, clickPath="", index=0):
time.sleep(node["parameters"]["historyWait"])
else:
time.sleep(2)
Log("切换历史记录等待2秒或者:", node["parameters"]["historyWait"])
Log("Change history back time or:",
node["parameters"]["historyWait"])
browser.execute_script('window.stop()')
except NoSuchElementException:
Log("pathNotFound: ", path)
@ -360,7 +364,7 @@ def openPage(para, loopValue):
recordLog('time out after 10 seconds when getting body text:: ' + url)
browser.execute_script('window.stop()')
time.sleep(1)
Log("获得bodytext等待1秒")
Log("Need to wait 1 second to get body text")
# 再执行一遍
bodyText = browser.find_element(By.CSS_SELECTOR, "body").text
rt.end()
@ -378,13 +382,15 @@ def openPage(para, loopValue):
# 键盘输入事件
def inputInfo(para, loopValue):
time.sleep(1) # 输入之前等待1秒
Log("输入前等待1秒")
rt = Time("输入文字")
Log("Wait 1 second before input")
rt = Time("Input Text")
try:
textbox = browser.find_element(By.XPATH, para["xpath"])
except:
Log("找不到输入框元素:" + para["xpath"] + "请尝试执行前等待")
recordLog("找不到输入框元素:" + para["xpath"] + "请尝试执行前等待")
Log("Cannot find input box element:" +
para["xpath"] + "Please try to set the wait time before executing this operation")
recordLog("Cannot find input box element:" +
para["xpath"] + "Please try to set the wait time before executing this operation")
exit()
textbox.send_keys(Keys.CONTROL, 'a')
textbox.send_keys(Keys.BACKSPACE)
@ -401,8 +407,8 @@ def inputInfo(para, loopValue):
def clickElement(para, loopElement=None, clickPath="", index=0):
global history
time.sleep(0.1) # 点击之前等待1秒
rt = Time("点击元素")
Log("点击之前等待1秒")
rt = Time("Click Element")
Log("Wait 1 second before clicking element")
if para["useLoop"]: # 使用循环的情况下,传入的clickPath就是实际的xpath
path = clickPath
else:
@ -422,7 +428,7 @@ def clickElement(para, loopElement=None, clickPath="", index=0):
Log(e)
recordLog(str(e))
time.sleep(0.5) # 点击之后等半秒
Log("点击之后等待0.5秒")
Log("Wait 0.5 second after clicking element")
time.sleep(random.uniform(1, 10)) # 生成一个a到b的小数等待时间
if tempHandleNum != len(browser.window_handles): # 如果有新标签页的行为发生
browser.switch_to.window(browser.window_handles[-1]) # 跳转到新的标签页
@ -451,7 +457,7 @@ def clickElement(para, loopElement=None, clickPath="", index=0):
recordLog('time out after 10 seconds when getting body text')
browser.execute_script('window.stop()')
time.sleep(1)
Log("bodytext等待1秒")
Log("wait one second after get body text")
# 再执行一遍
bodyText = browser.find_element(By.CSS_SELECTOR, "body").text
rt.end()
@ -465,8 +471,8 @@ def clickElement(para, loopElement=None, clickPath="", index=0):
def getData(para, loopElement, isInLoop=True, parentPath="", index=0):
if not isInLoop and para["wait"] == 0:
time.sleep(1) # 如果提取数据字段不在循环内而且设置的等待时间为0,默认等待1秒
Log("提取数据等待1秒")
rt = Time("提取数据")
Log("Wait 1 second before extracting data")
rt = Time("Extract Data")
for p in para["paras"]:
content = ""
try:
@ -644,7 +650,7 @@ def isnull(s):
def clean():
global saveName, log, OUTPUT, browser, SAVED
if not SAVED:
print('清理环境保存数据')
print('Clear Environment and save data')
with open("Data/"+saveName + '_log.txt', 'w', encoding='utf-8-sig') as file_obj:
file_obj.write(log)
file_obj.close()
@ -661,18 +667,18 @@ if __name__ == '__main__':
options = Options()
exe_path = "chromedriver.exe"
option = webdriver.ChromeOptions()
if os.path.exists(os.getcwd()+"/ServiceWrapper"):
print("Finding chromedriver in ServiceWrapper",
os.getcwd()+"/ServiceWrapper")
options.binary_location = "ServiceWrapper/Chrome/chrome.exe" # 指定chrome位置
exe_path = "ServiceWrapper/Chrome/chromedriver.exe"
if os.path.exists(os.getcwd()+"/EasySpider"):
print("Finding chromedriver in EasySpider",
os.getcwd()+"/EasySpider")
options.binary_location = "EasySpider/Chrome/chrome.exe" # 指定chrome位置
exe_path = "EasySpider/Chrome/chromedriver.exe"
elif os.path.exists(os.getcwd()+"/Debug"):
print("Finding chromedriver in ServiceWrapper",
print("Finding chromedriver in EasySpider",
os.getcwd()+"/Debug")
options.binary_location = "Debug/Chrome/chrome.exe" # 指定chrome位置
exe_path = "Debug/Chrome/chromedriver.exe"
elif os.getcwd().find("ExecuteStage") >= 0: # 如果直接执行
print("Finding chromedriver in ServiceWrapper",
print("Finding chromedriver in EasySpider",
os.getcwd()+"/Debug")
option.binary_location = "./Application/chrome.exe" # 指定chrome位置
# option.binary_location = "C:\\Users\\q9823\\AppData\\Local\\Google\\Chrome\\Application\\chrome.exe"
@ -693,10 +699,10 @@ if __name__ == '__main__':
# 2. User Profile文件夹的路径是:C:\Users\用户名\AppData\Local\Google\Chrome\User Data不要加Default
# 3. 就算User Profile相同,chrome版本不同所存储的cookie信息也不同,也不能爬
# 4. TMALL如果一直弹出验证码,而且无法通过验证,那么需要在其他浏览器上用
option.add_argument(
'--user-data-dir=C:\\Users\\q9823\\AppData\\Local\\Google\\Chrome\\User Data') # TMALL 反扒
option.add_argument("--profile-directory=Default")
if len(sys.argv) > 5:
userdataPath = sys.argv[5]
option.add_argument(f'--user-data-dir={userdataPath}') # TMALL 反扒
option.add_argument("--profile-directory=Default")
# options.add_argument(
# '--user-data-dir=C:\\Users\\q9823\\AppData\\Local\\Google\\Chrome\\User Data') # TMALL 反扒
option.add_argument(
@ -713,16 +719,16 @@ if __name__ == '__main__':
else:
id = 7 # 设置默认值
print("id:", id)
if len(sys.argv) > 2:
saveName = "task_" + str(id) + "_" + sys.argv[2] # 保存文件的名字
if len(sys.argv) > 3:
saveName = "task_" + str(id) + "_" + sys.argv[3] # 保存文件的名字
else:
saveName = "task_" + str(id) + "_" + \
str(random.randint(0, 999999999)) # 保存文件的名字
print("saveName is:", saveName, sys.argv, len(sys.argv) > 2)
if len(sys.argv) > 3:
backEndAddress = sys.argv[3]
if len(sys.argv) > 2:
backEndAddress = sys.argv[2]
else:
backEndAddress = "http://servicewrapper.naibo.wang"
backEndAddress = "https://servicewrapper.systems"
# TODO when transfer to electron, use commandline-config
config = {
@ -738,7 +744,6 @@ if __name__ == '__main__':
print("remote")
content = requests.get(
backEndAddress + "/backEnd/queryTask?id=" + str(id))
service = json.loads(content.text)
else:
print("local")
with open("tasks/" + str(id) + ".json", 'r', encoding='utf-8') as f:
@ -764,7 +769,7 @@ if __name__ == '__main__':
for i in range(len(links)):
excuteNode(0)
urlId = urlId + 1
print("执行完成!")
print("Done!")
recordLog("Done!")
# dataPath = os.path.abspath(os.path.join(os.getcwd(), "../Data"))
with open("Data/"+saveName + '_log.txt', 'w', encoding='utf-8-sig') as file_obj:

+ 3
- 0
ExecuteStage/generateEXE.cmd Просмотреть файл

@ -0,0 +1,3 @@
rmdir /s build
rmdir /s dist
pyinstaller -F --icon=favicon.ico easyspider_executestage.py

+ 0
- 1
ExecuteStage/packageCommand.cmd Просмотреть файл

@ -1 +0,0 @@
pyinstaller -F --icon=favicon.ico .\ServiceWrapper_ExecuteStage.py

+ 0
- 4
ExecuteStage/packageCommand.md Просмотреть файл

@ -1,4 +0,0 @@
G:\venv\Scripts\activate.bat
cd D:\我的文档\浙江大学\项目\高分项目\服务包装\服务包装手动版\servicewrapper-artificial-version\ExcuteStage
D:
pyinstaller -F --icon=favicon.ico ServiceWrapper_ExcuteStage.py

Extension/ServiceWrapper.crx → Extension/CN.crx Просмотреть файл


Extension/ServiceWrapper/_locales/en/messages.json → Extension/EasySpider/_locales/en/messages.json Просмотреть файл

@ -1,18 +1,18 @@
{
"appName": {
"message": "servicewrapper",
"message": "EasySpider",
"description": "The name of the application"
},
"appShortName": {
"message": "fwbz",
"message": "es",
"description": "The short_name (maximum of 12 characters recommended) is a short version of the app's name."
},
"appDescription": {
"message": "service wrapper",
"message": "EasySpider",
"description": "The description of the application"
},
"browserActionTitle": {
"message": "servicewrapper",
"message": "EasySpider",
"description": "The title of the browser action button"
}
}

Extension/ServiceWrapper/images/api_thumb_450.jpg → Extension/EasySpider/images/api_thumb_450.jpg Просмотреть файл


Extension/ServiceWrapper/images/icon-128.png → Extension/EasySpider/images/icon-128.png Просмотреть файл


Extension/ServiceWrapper/images/icon-16.png → Extension/EasySpider/images/icon-16.png Просмотреть файл


Extension/ServiceWrapper/images/icon-19.png → Extension/EasySpider/images/icon-19.png Просмотреть файл


Extension/ServiceWrapper/images/icon-38.png → Extension/EasySpider/images/icon-38.png Просмотреть файл


Extension/ServiceWrapper/manifest.json → Extension/EasySpider/manifest.json Просмотреть файл


+ 78
- 0
Extension/EasySpider/manifest.json.bak Просмотреть файл

@ -0,0 +1,78 @@
{
"name": "__MSG_appName__",
"short_name": "__MSG_appShortName__",
"description": "__MSG_appDescription__",
"version": "0.0.0",
"manifest_version": 3,
"default_locale": "en",
"icons": {
"16": "images/icon-16.png",
"128": "images/icon-128.png"
},
"background": {
"service_worker": "scripts/background.js"
},
"action": {
"default_icon": {
"19": "images/icon-19.png",
"38": "images/icon-38.png"
},
"default_title": "__MSG_browserActionTitle__",
"default_popup": "pages/popup.html"
},
"options_page": "pages/options.html",
"options_ui": {
"page": "pages/options.html"
},
"minimum_chrome_version": "10.0",
"devtools_page": "pages/devtools.html",
"omnibox": {
"keyword": "fwbz"
},
"content_scripts": [{
"matches": [
"http://*/*",
"https://*/*"
],
"css": [
"styles/contentscript.css"
],
"js": [
"scripts/jquery-3.4.1.min.js", "scripts/vue.js", "scripts/baozhuangscript.js", "scripts/contentscript.js", "scripts/messageInteraction.js"
],
"run_at": "document_end",
"all_frames": false
}],
"web_accessible_resources": [{
"resources": ["js/inject.js"],
"matches": [],
"extension_ids": []
}],
"host_permissions": ["*://*/*"],
"permissions": [
"activeTab",
"alarms",
"bookmarks",
"browsingData",
"contextMenus",
"cookies",
"downloads",
"downloads.open",
"geolocation",
"history",
"identity",
"idle",
"management",
"nativeMessaging",
"notifications",
"privacy",
"proxy",
"sessions",
"storage",
"tabs",
"topSites",
"webNavigation",
"webRequest",
"unlimitedStorage"
]
}

Некоторые файлы не были показаны из-за большого количества измененных файлов

Загрузка…
Отмена
Сохранить