def create_profile(cache_name='', allow_js=False): from calibre.utils.random_ua import random_common_chrome_user_agent if cache_name: ans = QWebEngineProfile(cache_name, QApplication.instance()) ans.setCachePath(os.path.join(cache_dir(), 'scraper', cache_name)) else: ans = QWebEngineProfile(QApplication.instance()) ans.setHttpUserAgent(random_common_chrome_user_agent()) ans.setHttpCacheMaximumSize(0) # managed by webengine s = ans.settings() a = s.setAttribute a(QWebEngineSettings.WebAttribute.PluginsEnabled, False) a(QWebEngineSettings.WebAttribute.JavascriptEnabled, allow_js) s.setUnknownUrlSchemePolicy( QWebEngineSettings.UnknownUrlSchemePolicy.DisallowUnknownUrlSchemes) a(QWebEngineSettings.WebAttribute.JavascriptCanOpenWindows, False) a(QWebEngineSettings.WebAttribute.JavascriptCanAccessClipboard, False) # ensure javascript cannot read from local files a(QWebEngineSettings.WebAttribute.LocalContentCanAccessFileUrls, False) a(QWebEngineSettings.WebAttribute.AllowWindowActivationFromJavaScript, False) js = P('scraper.js', allow_user_override=False, data=True).decode('utf-8') ans.token = secrets.token_hex() js = js.replace('TOKEN', ans.token) insert_scripts(ans, create_script('scraper.js', js)) return ans
def create_profile(): ans = getattr(create_profile, 'ans', None) if ans is None: ans = QWebEngineProfile('viewer-lookup', QApplication.instance()) ans.setHttpUserAgent(random_user_agent(allow_ie=False)) ans.setCachePath(os.path.join(cache_dir(), 'ev2vl')) js = P('lookup.js', data=True, allow_user_override=False) insert_scripts( ans, create_script('lookup.js', js, injection_point=QWebEngineScript.InjectionPoint. DocumentCreation)) s = ans.settings() s.setDefaultTextEncoding('utf-8') create_profile.ans = ans return ans