diff --git a/src/zh/comicabc/build.gradle b/src/zh/comicabc/build.gradle
index 1a5383914..f95e6766c 100644
--- a/src/zh/comicabc/build.gradle
+++ b/src/zh/comicabc/build.gradle
@@ -1,7 +1,7 @@
 ext {
     extName = 'Comicabc'
     extClass = '.Comicabc'
-    extVersionCode = 1
+    extVersionCode = 2
 }
 
 apply from: "$rootDir/common.gradle"
diff --git a/src/zh/comicabc/src/eu/kanade/tachiyomi/extension/zh/comicabc/Comicabc.kt b/src/zh/comicabc/src/eu/kanade/tachiyomi/extension/zh/comicabc/Comicabc.kt
index 566a81e6b..d40b078bd 100644
--- a/src/zh/comicabc/src/eu/kanade/tachiyomi/extension/zh/comicabc/Comicabc.kt
+++ b/src/zh/comicabc/src/eu/kanade/tachiyomi/extension/zh/comicabc/Comicabc.kt
@@ -17,16 +17,16 @@ class Comicabc : ParsedHttpSource() {
     override val name: String = "無限動漫"
     override val lang: String = "zh"
     override val supportsLatest: Boolean = true
-    override val baseUrl: String = "https://www.comicabc.com"
+    override val baseUrl: String = "https://www.8comic.com"
 
     // Popular
 
     override fun popularMangaRequest(page: Int) = GET("$baseUrl/comic/h-$page.html", headers)
     override fun popularMangaNextPageSelector(): String = "div.pager a span.mdi-skip-next"
-    override fun popularMangaSelector(): String = "div.default_row_width > div.col-2"
+    override fun popularMangaSelector(): String = ".container .row a.comicpic_col6"
     override fun popularMangaFromElement(element: Element): SManga = SManga.create().apply {
-        title = element.selectFirst("li.cat2_list_name")!!.text()
-        setUrlWithoutDomain(element.selectFirst("a")!!.attr("abs:href"))
+        title = element.selectFirst("li.nowraphide")!!.text()
+        setUrlWithoutDomain(element.attr("abs:href"))
         thumbnail_url = element.selectFirst("img")!!.attr("abs:src")
     }
 
@@ -34,7 +34,7 @@ class Comicabc : ParsedHttpSource() {
 
     override fun latestUpdatesRequest(page: Int) = GET("$baseUrl/comic/u-$page.html", headers)
     override fun latestUpdatesNextPageSelector() = popularMangaNextPageSelector()
-    override fun latestUpdatesSelector() = popularMangaSelector()
+    override fun latestUpdatesSelector() = ".container .row .cat2_list a"
     override fun latestUpdatesFromElement(element: Element) = popularMangaFromElement(element)
 
     // Search
@@ -50,21 +50,21 @@ class Comicabc : ParsedHttpSource() {
     // Details
 
     override fun mangaDetailsParse(document: Document): SManga = SManga.create().apply {
-        title = document.selectFirst("div.item-top-content h3.item_name")!!.text()
-        thumbnail_url = document.selectFirst("div.item-topbar img.item_cover")!!.attr("abs:src")
-        author = document.selectFirst("div.item-top-content > li:nth-of-type(3)")!!.ownText()
+        title = document.selectFirst(".item_content_box .h2")!!.text()
+        thumbnail_url = document.selectFirst(".item-cover img")!!.attr("abs:src")
+        author = document.selectFirst(".item_content_box .item-info-author")?.text()?.substringAfter("作者: ")
         artist = author
-        description = document.selectFirst("div.item-top-content > li.item_info_detail")!!.text()
-        status = when {
-            document.selectFirst("div.item_comic_eps_div")!!.text().contains("連載中") -> SManga.ONGOING
-            document.selectFirst("div.item_comic_eps_div")!!.text().contains("已完結") -> SManga.COMPLETED
+        description = document.selectFirst(".item_content_box .item_info_detail")?.text()
+        status = when (document.selectFirst(".item_content_box .item-info-status")?.text()) {
+            "連載中" -> SManga.ONGOING
+            "已完結" -> SManga.COMPLETED
             else -> SManga.UNKNOWN
         }
     }
 
     // Chapters
 
-    override fun chapterListSelector(): String = "div#div_li1 td > a"
+    override fun chapterListSelector(): String = "#chapters a"
     override fun chapterFromElement(element: Element): SChapter = SChapter.create().apply {
         val onclick = element.attr("onclick")
         val comicId = onclick.substringAfter("cview('").substringBefore("-")
@@ -78,20 +78,20 @@ class Comicabc : ParsedHttpSource() {
 
     // Pages
 
-    override fun pageListParse(response: Response): List<Page> = mutableListOf<Page>().apply {
+    override fun pageListParse(response: Response): List<Page> {
         val document = response.asJsoup()
         val url = response.request.url.toString()
         val script = document.selectFirst("script:containsData(function request)")!!.data()
-            .replace("function ge(e){return document.getElementById(e);}", "")
-            .replace("ge\\(.*\\).src".toRegex(), "imageUrl")
-            .replace("spp()", "")
+            .replace("document.location", "\"$url\"")
+            .replace("\$(\"#comics-pics\").html(xx);", "")
+            .substringBefore("\$(\"#pt,#ptb\")")
         val quickJs = QuickJs.create()
-        val totalPage = quickJs.evaluate(nview + script.replace("document.location", "\"$url\"") + "ps") as Int
-        for (i in 1..totalPage) {
-            val imageUrl = quickJs.evaluate(nview + script.replace("document.location", "\"$url-$i\"") + "imageUrl") as String
-            add(Page(i - 1, "", "https:$imageUrl"))
-        }
+        val variableName = script.substringAfter("img  s=\"").substringBefore("'")
+        val images = quickJs.evaluate(nview + script + lazyloadx.format(variableName)) as Array<*>
         quickJs.close()
+        return images.mapIndexed { index, it ->
+            Page(index, "", it.toString())
+        }
     }
 
     override fun pageListParse(document: Document): List<Page> = throw UnsupportedOperationException()
@@ -99,8 +99,20 @@ class Comicabc : ParsedHttpSource() {
 
     companion object {
         // Functions required by script in pageListParse()
-        // Taken from https://www.comicabc.com/js/nview.js?20180806
+        // Taken from https://www.8comic.com/js/j.js?9989588541
         const val nview = """function lc(l){if(l.length!=2 ) return l;var az="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";var a=l.substring(0,1);var b=l.substring(1,2);if(a=="Z") return 8000+az.indexOf(b);else return az.indexOf(a)*52+az.indexOf(b);}
-function nn(n){return n<10?'00'+n:n<100?'0'+n:n;}function mm(p){return (parseInt((p-1)/10)%10)+(((p-1)%10)*3)};"""
+function nn(n){return n<10?'00'+n:n<100?'0'+n:n;}function mm(p){return (parseInt((p-1)/10)%10)+(((p-1)%10)*3)};
+function su(a,b,c){var e=(a+'').substring(b,b+c);return (e);}var y=46;"""
+
+        // Modified from https://www.8comic.com/js/lazyloadx.js?9989588541
+        const val lazyloadx = """src="%s"
+var b=eval(src.substring(0,5));
+var c=eval(src.substring(5,10));
+var d=eval(src.substring(10,15));
+var arr=[];
+for(var i=1;i<=ps;i++){
+    arr.push('https://img'+su(b,0,1)+'.8comic.com/'+su(b,1,1)+'/' + ti  + '/'+c+'/' + nn(i) + '_' + su(d,mm(i),3) + '.jpg');
+}
+arr"""
     }
 }