[Riješeno] Pronađi JS skriptu u *.html i stavi je pod komentar Find/Replace

1

[Riješeno] Pronađi JS skriptu u *.html i stavi je pod komentar Find/Replace

offline
  • IvanC 
  • Ugledni građanin
  • Pridružio: 30 Jun 2009
  • Poruke: 403

Imam jedan problem koji moram odraditi na preko 1600 files.
U Folderu C:\Temp nalazi se nekoliko desetaka foldera i subfoldera a u njima cca 1600 *.html files

U tom *.html files nalaze se JavaScripte AdSense oglasa i ima ih više vrsta tj. sa različitim source kodom

Trebao bih u jednom potezu sve te JS skripte staviti pod HTML komentare, i naravno kada odradim željeni posao sve te JavaScripte ponovno vratiti u prvobitno originalno stanje. Imam preko 25 komada tih različitih JS skripti.
(smetaju mi prilikom editiranja tj. usporavaju me kod rada na tim HTML datotekama)

Ako netko ima VBS skriptu ili sličan program a možda zna za nešto slično bio bih zahvalan.
(vidi attach foldera sa primjerom datoteka)

Program bi u stvari trebap pronaći sve što se nalazi između koda <script ..... </script> i postaviti u komentar <!-- XXXX -->, ali kasnije i vratiti u prvobitno stanje originala.

https://www.mycity.rs/must-login.png



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • soxxx 
  • Prijatelj foruma
  • Pridružio: 25 Maj 2005
  • Poruke: 1482
  • Gde živiš: Gracanica, Kosovo

Mozes li da postavis kratak primer fajla, tj. tog teksta jer trenutno ne mogu da otvorim prilog (blokira me proksi). Verovatno moze da se nesto uradi kratkom awk skriptom.



offline
  • dr_Bora  Male
  • Anti Malware Fighter
    Rank 2
  • Pridružio: 24 Jul 2007
  • Poruke: 12280
  • Gde živiš: Höganäs, SE

Citat:Program bi u stvari trebap pronaći sve što se nalazi između koda <script ..... </script> i postaviti u komentar <!-- XXXX -->, ali kasnije i vratiti u prvobitno stanje originala.

Treba iskomentarisati sve <script ..... </script> blokove ili samo one koji su vezani za adsense?

offline
  • IvanC 
  • Ugledni građanin
  • Pridružio: 30 Jun 2009
  • Poruke: 403

@soxxx
evo primjer jedne datoteke koja sadrži 4 SCRIPT koda (rotator bannera, 2x AdSense, Tracking Analytics)

<!DOCTYPE HTML PUBLIC "-//W3C//Dtd HTML 4.0 transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1250"> <meta http-equiv="Content-Language" content="hr"> <title>title</title> <script       language="JavaScript"       src="http://www.ic.ims.hr/magicimage.js"       type="text/javascript"> </script> </head> <body> <table border="0" width="100%" id="table6" style="border-collapse: collapse">             <tr>                <td colspan="2" align="center">                <p style="text-align: center"> </p>                stranica 1 </p>                    </td>             </tr>             <tr>                <td class=H1 valign="top" style="text-align: center" colspan="2">                </td>             </tr>             <tr>                <td class=H1 valign="top" colspan="2"> </td>             </tr>             <tr>                <td class=H1 valign="top" style="text-align: center" colspan="2"><script type="text/javascript"><!-- google_ad_client = "pub-123456789"; /* 728x15,*/ google_ad_slot = "124689"; google_ad_width = 758; google_ad_height = 18; //--> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script></td>                </tr>             <tr>                <td class=H1 valign="top" colspan="2"> <table border="0" width="100%" id="table21" style="border-collapse: collapse">    <tr>       <td align="center">       </td>    </tr> </table>               </td>                </tr>             <tr>                <td colspan="2"><script type="text/javascript"><!-- google_ad_client = "ca-pub-123456789"; /* Veliki vodoravni 970x90 */ google_ad_slot = "12345678"; google_ad_width = 390; google_ad_height = 40; //--> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script></td>             </tr>             <tr>                <td valign="top" colspan="2"><hr></td>             </tr>             <tr>                <td valign="top" colspan="2"><hr></td>             </tr>             <tr>                <td valign="top" colspan="2">                <table border="0" width="100%">                   <tr>                      <td align="center"> </td>                   </tr>                </table>               </td>             </tr>             </table> <script type="text/javascript"> var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www."); document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E")); </script> <script type="text/javascript"> try { var pageTracker = _gat._getTracker("UA-95147806-5"); pageTracker._trackPageview(); } catch(err) {}</script> </body> </html>

@dr_Bora
Što da ti kažem, volio bih imati obe verzije za svaki slučaj jer ne znam što kada može trebati.
Najveći problem su mi ove adsense skripte koje već u sebi sadrže komentare. Ja imam takvih skripti preko 25 ali nisu sve implementirane na svaku stranicu.
Ako je u pitanju BLOK AdSense onda je odgovor potvrdan.

Primjer: moram skripte staviti izvan [code] da bi se vidjeli Bold i Crvene oznake

Ovo je PRVA JS: Koja sada trenutno sadrži dva HTML komentara (otvoreni i zatvoreni) u prvom dijelu skripte

<script type="text/javascript"><!--
google_ad_client = "ca-pub-123456789";
/* Ads XYZ */
google_ad_slot = "13579";
google_ad_width = 120;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="//pagead2.googlesyndication.com/pagead/show_ads.js">
</script>

Ovu gornju skriptu program mora pronaći i treba obuhvatiti novim komentarima, pa bi u konačnici trebala izgledati ovako

<!--<script type="text/javascript"><!--
google_ad_client = "ca-pub-123456789";
/* Ads XYZ */
google_ad_slot = "13579";
google_ad_width = 120;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="//pagead2.googlesyndication.com/pagead/show_ads.js">
</script>-->

Dakle skripta treba dodati otvoreni i zatvoreni kod HTML komentara na početku i kraju.
Ovakvih JavaScript kodova ima preko-nekoliko vrsta, tako da ja ne mogu to uraditi preko TXT editora jer bi se mogao izgubiti i napraviti neki propust što u konačnici uništavav sav posao.


Dakle može JS skripta izgledati i ovako

[code]<script type="text/javascript"><!--
google_ad_client = "ca-pub-123456789";
/* Ads XYZ */
google_ad_slot = "2468";
google_ad_width = 407;
google_ad_height = 305;
//-->
</script>
<script type="text/javascript"
src="//pagead2.googlesyndication.com/pagead/show_ads.js">
</script>[/code]

Znači ima dijelova koji nisu isti u svim skriptama.

Gledajući skriptu iznad koju sam obojao PLAVI komentari moraju na kraju ostati a CRVENI biti uklonjeni

I na kraju kada odradim posao opet trebam ukloniti te komentare koji su dodani na početku i na kraju skripte (prvi i zadnji), tako da na kraju završenog posla sve skripte budu u originalu kao što su i bile.

Dakle hodogram ide otprilike ovako:
1. Komentiram sve skripte
2. Odradim neke poslove na stranicama i kada sam završio
3. ponovno uklonim dodane komentare sa ADS skripti (ali tako da ostane onaj komentar koji se već nalazio unutar ADS skripte

BTW: ovo bi bilo dobro za sve <script ..... </script> blokove, ali ako ne može onda je dobro i samo za ADS a ja ću preko TXT editora ostale "iskomentarisati"

offline
  • dr_Bora  Male
  • Anti Malware Fighter
    Rank 2
  • Pridružio: 24 Jul 2007
  • Poruke: 12280
  • Gde živiš: Höganäs, SE

Napisano: 25 Apr 2014 20:07

IvanC ::Ovu gornju skriptu program mora pronaći i treba obuhvatiti novim komentarima, pa bi u konačnici trebala izgledati ovako

<!--<script type="text/javascript"><!--
google_ad_client = "ca-pub-123456789";
/* Ads XYZ */
google_ad_slot = "13579";
google_ad_width = 120;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="//pagead2.googlesyndication.com/pagead/show_ads.js">
</script>-->



Ovde komentar prestaje već kod --> i ostaju ti 4 aktivne linije. Zar ne?

Dopuna: 25 Apr 2014 22:33

Probaj ovo...

Drag & drop foldera, na kraju ćeš dobiti poruku koliko html file-ova je obrađeno.
Originalni file-ovi će dobiti old ekstenziju.

Testirah na folderu koji su uploadovao, izgleda ok (ako je verovati Notepad++). Sve skripte treba da su iskomentarisane (teško je odraditi samo adsense).

U prvobitno stanje vraćaš sa search and replace ovih:

<!--TempComment
TempComment-->

u "" (u ništa). Dobije se identičan file kao originalni.

Set objFSO = CreateObject("Scripting.FileSystemObject") '------------------------ Sub PutComment(sFileToFix) Dim oOldFile, oNewFile, sLine, nScriptStartPos, nScriptEndPos, nCommentEndPos, bCommentIsOpen Set oOldFile = objfso.OpenTextFile(sFileToFix, 1) Set oNewFile = objfso.OpenTextFile(sFileToFix & ".new", 2, True) bCommentIsOpen = False If Not oOldFile.AtEndOfStream Then   While Not oOldFile.AtEndOfStream     sLine = oOldFile.ReadLine     nScriptStartPos = InStr(1, sLine, "<script", vbTextCompare)     If nScriptStartPos > 0 Then       sLine = Replace(sLine, "<script", "<!--TempComment<script") 'our comment is opened       bCommentIsOpen = True     End If     nScriptEndPos = InStr(1, sLine, "</script>", vbTextCompare)     If nScriptEndPos > 0 Then       sLine = Replace(sLine, "</script>", "</script>TempComment-->") 'our comment is closed       bCommentIsOpen = False     End If     nCommentEndPos = InStr(1, sLine, "-->", vbTextCompare) ' position of the subcomment end     If (nCommentEndPos > 0) And bCommentIsOpen Then sLine = Replace(sLine, "-->", "--><!--TempComment") ' reopen our comment         If oOldFile.AtEndOfStream Then       oNewFile.Write(sLine)     Else       oNewFile.WriteLine(sLine)     End If   Wend End If oNewFile.Close oOldFile.Close 'objFSO.DeleteFile sFileToFix, True              ' delete original or... objFSO.MoveFile sFileToFix, sFileToFix & ".old"  ' rename original to .old objFSO.MoveFile sFileToFix & ".new", sFileToFix End Sub '------------------------ Sub ShowSubFolders(Folder)    For Each Subfolder In Folder.SubFolders       Set objFolder = objFSO.GetFolder(Subfolder.Path)       Set colFiles = objFolder.Files       For Each objFile In colFiles          If LCase(objFSO.GetExtensionName(objFile.Path)) = "html" Then            PutComment objFile.Path              nCount = nCount + 1            End If       Next       ShowSubFolders Subfolder    Next End Sub '------------------------ '------------------------ If WScript.Arguments.length = 0 Then   MsgBox "Drag and drop a folder with html files"   WScript.Quit End If objStartFolder = WScript.Arguments(0) If Not objFSO.FolderExists(objStartFolder) Then   MsgBox "This is not a folder!"   WScript.Quit End If Set objFolder = objFSO.GetFolder(objStartFolder) Set colFiles = objFolder.Files nCount = 0 For Each objFile In colFiles     If LCase(objFSO.GetExtensionName(objFile.Path)) = "html" Then       PutComment objFile.Path       nCount = nCount + 1     End if Next ShowSubfolders objFSO.GetFolder(objStartFolder) MsgBox "Done!" & vbCrLf & vbCrLf & "Files: " & nCount

offline
  • IvanC 
  • Ugledni građanin
  • Pridružio: 30 Jun 2009
  • Poruke: 403

dr_Bora ::
Testirah na folderu koji su uploadovao, izgleda ok (ako je verovati Notepad++). Sve skripte treba da su iskomentarisane (teško je odraditi samo adsense).
U prvobitno stanje vraćaš sa search and replace ovih:
<!--TempComment
TempComment-->
ODLIČNO!
Što da ti kažem i ovako je dobro, sve JS su na neki način blokirane i EW4 ih neće učitavati pa sam si ubrzao posao.

Nešto slično sam ja zamislio preko Find/Replace ali na način da za svaku JavaScript koju imam u html kodu (preko 30 vrsta) odredim neku jedinstvenu šifru pa sve to dvaput sa Find/Replace ukloniti pa vratiti i to sve na preko 1500 files Sad
Nije ni to teško samo treba utoršiti vremena ali kako znati jesam li negdje pogriješio a i pitanje je kako vratiti prethodni korak ako jesam.

Ali ovaj tvoj VBS kod mi skraćuje vrijeme rada i ubrzava posao pogotovo što ima *.old files.

HVALA ti!
pozz

Što se mene tiče problem je riješen.

offline
  • soxxx 
  • Prijatelj foruma
  • Pridružio: 25 Maj 2005
  • Poruke: 1482
  • Gde živiš: Gracanica, Kosovo

Izvini na kasnom odgovoru, nisam puno pri kompjuteru ovih dana. Vidim da je dr_Bora vec dao resenje koje ti odgovara, ali posto sam se prvi javio da probam i ja. Wink

Dakle, koristicu gawk za Windows. Batch skripta:
setlocal EnableDelayedExpansion for /f "delims= " %%i in (spisak.txt) do (    set "destf=%%~nxi"    gawk -f runme4.awk %%i > dest_dir/!destf! )
gawk program je u istom, tj. pocetnom folderu. Odredisni folder je dest_dir (mada veoma lako moze da se postavi da kopira vajlove u iste foldere). Gawk skripta koja samo vrsi izmenu kod <script> tagova:
# Komentari u html fajlu /<script/{    print gensub(/(<script)/,"<!--KOMENT--< \\1", "g", $0)    next;    } /<\/script>/{    print gensub(/(<\/script>)/,"\\1 >--KOMENT-->", "g", $0)    next; } { print }
Probao na onom tvom folderu i mislim da je sve ok. Moze i samo za adsense, samo da se prepravi kod.

Btw, na dr_Borinom primeru mislim da ima jedan "<!--" viska? Ne razumem se u html, ali mi se cini da jedan komentar ostaje otvoren?
Citat:
<!--TempComment<script type="text/javascript"><!--
google_ad_client = "pub-123456789";
/* 728x15,*/
google_ad_slot = "124689";
google_ad_width = 758;
google_ad_height = 18;
//--><!--TempComment
</script>TempComment-->
<!--TempComment<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>TempComment-->

offline
  • IvanC 
  • Ugledni građanin
  • Pridružio: 30 Jun 2009
  • Poruke: 403

soxxx ::Izvini na kasnom odgovoru, nisam puno pri kompjuteru ovih dana. Vidim da je dr_Bora vec dao resenje koje ti odgovara, ali posto sam se prvi javio da probam i ja........
Probao na onom tvom folderu i mislim da je sve ok. Moze i samo za adsense, samo da se prepravi kod.
@soxxx hvala ti na odgovoru, vidim da si se potrudio. Međutim ja ne znam prepraviti ovu tvoju skriptu, ali više nije ni važno, možda će biti dobro za druge čitatelje teme.
Meni savršeno odgovara VBS zbog jednostavnosti i bez ikakvih dodatnih instalacija programa a pogotovo što mi pravi kopiju *.old za svaki slučaj.

btw: onaj koment za višak u skripti ne razumijem pa eto dr_Bora neka pogleda ali meni sve radi OK i kada odradim Find/Replace skripta se vraća u prvobitno stanje sa rasporedom naredbenih linija.

U svakom slučaju pohvale za trud i rad.
pozz

offline
  • dr_Bora  Male
  • Anti Malware Fighter
    Rank 2
  • Pridružio: 24 Jul 2007
  • Poruke: 12280
  • Gde živiš: Höganäs, SE

Bez boldovanog "<!--TempComment", jedan deo (8. linija) ostaje da "visi" van komentara:





Taj "-->" u 7. liniji zatvori (prvi) komentar, zato mora novi da se otvori.


<!--TempComment<script type="text/javascript"><!--
google_ad_client = "pub-123456789";
/* 728x15,*/
google_ad_slot = "124689";
google_ad_width = 758;
google_ad_height = 18;
//-->
<!--TempComment
</script>TempComment-->

<!--TempComment<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>TempComment-->

offline
  • IvanC 
  • Ugledni građanin
  • Pridružio: 30 Jun 2009
  • Poruke: 403

dr_Bora ::Bez boldovanog "<!--TempComment", jedan deo (8. linija) ostaje da "visi" van komentara:dr_Bora koji TXT editor koristiš da ti boja source code i stavlja ove znakove?

Ko je trenutno na forumu
 

Ukupno su 928 korisnika na forumu :: 12 registrovanih, 2 sakrivenih i 914 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: 357magnum, _Sale, A.R.Chafee.Jr., bobomicek, Dimitrise93, Koridor, Milos82, mrav pesadinac, novator, shaja1, vathra, zziko