偷懶刷網課題目,寫了段代碼解決了

一.分析問題

      刷網課題目?網上找人代shua???風險太大了!因爲這個涉及到異地登錄,很容易被檢測出來!學分就沒啦!!因爲我選的是《大學生創新創業》課,平時視頻開靜音讓它自己放吧,可是還有那麼多題啊!!!看了一下其他大牛的做法,一言不合python抓包,JS也可以抓的;我也準備動手了,我準備用C#,因爲我們最近在學C#,而這個可以作爲一個小項目加個分之類的。本來我就不喜歡聽課+寫作業;現在有個項目可以加加分,網課題也做了,一舉兩得!
在這裏插入圖片描述
智慧樹的官網我觀察過很久,最新的一次觀察,智慧樹已經在網站性能方面增加了不少安全措施:

  1. 網站的源代碼看不了【之前可以看!】
  2. 網站上的題目不能複製。
  3. 網站題目的參考項是圖片,也不能複製。

二.整理思路

      我的思路很簡單,想辦法把後臺源碼抓下來;因爲他的題目就在後臺源碼裏的,再對源碼進行字符轉化+過濾[正則過濾首先]。這是一個簡單的思路框架!

但問題是你看不到後臺源碼,我試着用常規抓取,結果失敗了!【什麼pythonjs一樣不能抓!】所以我換了一個思路,把網站離線pull到我的git倉庫裏,利用分配的網址做抓取,期間注意把我們的配置文件改成以index爲索引的文件。

我最後得到了我需要抓取的網址了:

https://jackieling.github.io/JackieLing/

自定義一個抓取方法吧:

形參分別表示傳入的網址和網站的後臺源碼

 public static string getwebcode2(string url, string encoder)
        {
         
        }

      WebClient是一種更高級別的抽象,是HttpWebRequest爲了簡化最常見任務而創建的,使用過程中你會發現他缺少基本的header,timeoust的設置,不過這些可以通過繼承httpwebrequest來實現。相對來說,WebClient比WebRequest更加簡單,它相當於封裝了request和response方法,不過需要說明的是,Webclient和WebRequest繼承的是不同類,兩者在繼承上沒有任何關係。使用WebClient可能比HttpWebRequest直接使用更慢(大約幾毫秒),但卻更爲簡單,減少了很多細節,代碼量也比較少。所以我寫的這段代碼還不算最精簡的,你還可以寫更短的。

  public static string getwebcode2(string url, string encoder)
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            //request.Method = "GET ";
            Stream receiveStream = response.GetResponseStream();
            StreamReader readStream = new StreamReader(receiveStream, Encoding.GetEncoding(encoder));
            string SourceCode = readStream.ReadToEnd();
            response.Close();
            readStream.Close();
            return SourceCode;

        }

接下來拿到信息之後開始過濾,其實我的過濾也不嚴謹,所以後邊會用C語言做輔助:

string[] aryReg ={
          @"<script[^>]*?>.*?</script>",
          
          @"<(\/\s*)?!?((\w+:)?\w+)(\w+(\s*=?\s*(([""'])(\\[""'tbnr]|[^\7])*?\7|\w+)|.{0})|\s)*?(\/\s*)?>",
          @"([\r\n])[\s]+",
          @"&(quot|#34);",
          @"&(amp|#38);",
          @"&(lt|#60);",
          @"&(gt|#62);",
          @"&(nbsp|#160);",
          @"&(iexcl|#161);",
          @"&(cent|#162);",
          @"&(pound|#163);",
          @"&(copy|#169);",
          @"&#(\d+);",
          @"-->",
          @"<!--.*\n"

         };

            string[] aryRep = {
           "",
           "",
           "",
           "\"",
           "&",
           "<",
           ">",
           " ",
           "\xa1",//chr(161),
           "\xa2",//chr(162),
           "\xa3",//chr(163),
           "\xa9",//chr(169),
           "",
           "\r\n",
           ""
          };

            string newReg = aryReg[0];
            string strOutput = strHtml;
            for (int i = 0; i < aryReg.Length; i++)
            {
                Regex regex = new Regex(aryReg[i], RegexOptions.IgnoreCase);
                strOutput = regex.Replace(strOutput, aryRep[i]);
            }

            strOutput.Replace("<", "");
            strOutput.Replace(">", "");
            strOutput.Replace("\r\n", "");
           
            return strOutput;

過濾完成我會把代碼進行再次過濾,和保存;C語言進行讀寫操作,存到了一個名爲“代碼.txt”的文件中!
在這裏插入圖片描述
這個其實很亂,然後我寫了一段C語言輔助一下:

fi = fopen("D:\\代碼.txt", "rb");
	if (NULL == fi) {
		printf("Can not open file 2.txt!\n");
		return;
	}
	fo = fopen("最終代碼.txt", "w");
	while (1) {
		c1 = fgetc(fi);
		if (EOF == c1) break;
		if ('0' <= c1 && c1 <= '9' || '\r' == c1 || '\n' == c1) {
			fputc(c1, fo);
			continue;
		}
		if(0x81u <= c1 && c1 <= 0xFEu) 
			{

			if (c1 >= 0&&c1 <= 9)
			{
				break;
			}
			else {
				c2 = fgetc(fi);
				if (EOF == c2) break;
				fputc(c1, fo);
				fputc(c2, fo);
				continue;
			}
			}
		
	}
	fcloseall();

最新的信息被我們寫入保存到了一個名爲“最終代碼.txt”的文件中去了,打開看一下:
我們看到了熟悉的二進制啊,因爲我的C代碼就是把那些過濾不完全的標籤進行格式化轉換,轉換成數字!但是我們看到我們的漢字也變成了亂碼,這個不急!我們把它格式調節一下,我是用vscode調的!
在這裏插入圖片描述
nice啊,看到下圖,文字顯示正常,接下來就只需要把數字踢出去就OK了,你可能在想又寫一段代碼???當然不是,只需要打開我們默默無聞的WPS或者word文檔!
在這裏插入圖片描述
在文檔裏將數字替換出去即可!!!
在這裏插入圖片描述
這些就是我們替換過濾出來的題目了,打開我們的公衆號,隨便複製一個問題進去,公衆號就會自動回覆答案,你再拿出手機,用手機刷題,電腦打開公衆號複製得到答案!!!
在這裏插入圖片描述
關注小哥公衆號“編程小哥令狐”

三.視頻全盤操作記錄紀實

這裏可以查看我整個操作的流程視頻

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章