Update 2018-06-05 21:13 UTC: Fixed by @ekojsalim, check out https://forum.novelupdates.com/posts/4111892/ --- So, I just made this GreaseMonkey script during my work break. It should allow you to bypass Qidian's forced video ads. It keeps running all the time, so it should work even if new chapters are loaded on scrolling. Once it detects an ad-wall, it blurs the text a bit while it's loading, and after a few seconds it should return to normal with the full content of the chapter. This does not play any ads under the hood; the delay is because Qidian generates a "token" specific to that chapter but it takes a while to become active. Code: // ==UserScript== // @name webnovel.com skip video ads // @namespace http://forum.novelupdates.com/ // @version 4 // @run-at document-end // @match http://webnovel.com/book/* // @match https://webnovel.com/book/* // @match http://www.webnovel.com/book/* // @match https://www.webnovel.com/book/* // ==/UserScript== //------------------------------------------------------------------------------ // This script is released to the public domain. No attribution is required. //------------------------------------------------------------------------------ // How frequently this script should check for new chapters. // // The amount is in milliseconds. const INTERVAL_CHAPTER_CHECK = 1000; // When a token is not ready yet, this is how much time we should wait // before trying again. // // The amount is in milliseconds. const INTERVAL_TOKEN_CHECK = 1000; /** * Check for new chapters and try to remove the adwall from them. */ function main() { Array.from( // Locked chapters. document.querySelectorAll('.cha-content._lock') ).forEach((lock) => { // Remove this class so this chapter won't be processed the next time // `main` is called. lock.classList.remove('_lock'); // Remove the video. const v = lock.closest('.chapter_content').querySelector('.lock-video'); if (v) { v.remove(); } // Element with the chapter content. const contentElement = lock.querySelector('.cha-words'); contentElement.style.opacity = '0.1'; // Get the ID for the series ("book"). // // Some chapters have the `data-bid` property, but not all of them. // That's why it's better to just get this from the URL. const bid = window.location.href.split('/book/')[1].split('/')[0]; // Get the ID for the chapter. const { cid } = lock.querySelector('[data-cid]').dataset; // Both ID are required. if (!bid || !cid) { return; } return fetch( `https://www.webnovel.com/apiajax/chapter/GetChapterContentToken?bookId=${bid}&chapterId=${cid}` ) .then(resp => resp.json()) .then(data => data.data.token) .then(token => encodeURIComponent(token)) .then(token => new Promise((resolve) => { // The raw body of the chapter. // // It will be plain text, so we must manually build the HTML for it. let content = ''; // Try to get the content of the chapter, and fulfill the promise once // we have it. // // This function will retry until it succeeds. function tick() { const url = `https://www.webnovel.com/apiajax/chapter/GetChapterContentByToken?token=${token}`; fetch(url) .then(resp => resp.json()) .then((data) => { content = data.data.content.trim(); if (content) { resolve(content); } else { setTimeout(tick, INTERVAL_TOKEN_CHECK); } }) .catch((err) => { console.error(err.stack); tick(); }); } tick(); })) .then((content) => { // Build the HTML for the chapter content. // // For now we only split on line breaks and wrap each piece // with "<p></p>" tags. const chapterHtml = content .split('\n') .map(p => p.trim()) .filter(p => !!p) .map(p => `<p>${p}</p>`) .join(''); // Update the chapter content and turn opacity back to 100%. contentElement.innerHTML = chapterHtml; contentElement.style.opacity = '1'; }) .catch((err) => { console.error(err.stack); }); }); } // Since Qidian may load new chapters without refreshing the page, we must // continuously check for new chapters in the page. setInterval(main, INTERVAL_CHAPTER_CHECK); Enjoy. P.S.: I'm not taking part on this WW vs QI bullshit drama. I'm completely neutral and only made this script because it's fun. Update 2017-08-25 14:48 UTC: Added more "@match" lines as per @mrttao comment. Update 2017-08-03 22:52 UTC: Added comments. Script is now explicitly on the public domain. Update 2018-06-04 18:14 UTC: Apparently this doesn't work anymore (based on the latest posts on this thread as of this moment). RIP. I don't even like CN, so I probably won't fix it unless I get really bored again.
OP clearly lying, this script was made to show dem godly skills. So any & all of you that still wanna read QI, y'all better worship OP! Press F to worship @noisypixy
First install GreaseMonkey (it's "TamperMonkey" on Chrome, but I don't use Chrome). Then copy the script. Then go to your Firefox addons, at the left you'll have the "GreaseMonkey" tab. Then click on "New user script" Then "Use script from clipboard" And it's done. You'll probably get a popup window, but you can safely close it.
Not really. If WW or any group pulls something similar I'd do the same, as long as it's interesting to program or I'm bored. I don't even like Chinese novels (only read like 3-4).
OP is like a real life Dr. House. I'm so skilled, I only do interesting stuff or if I'm bored! All the more reason to worship OP. Well jokes aside, great works on the script! Absolutely well done! & this is coming from non QI reader.
Well, he's probably one of these security experts "Hey look, they added something, let's bypass it, its legal anyway" kind and hence the result. Well, now I don't need to write it at very least