福建建设信息网站,客户案例 网站设计,正能量不良网站进入窗口免费阅读,如何做网站的伪静态页面获取网站视频真实链接
直接上工具类
直接调用即可#xff0c;这个工具类会返回加载的网页中所有的链接#xff0c;至于对链接怎么处理就是你们自己的事了#xff0c; 亲测至今我所遇到的所有视频#xff0c;它都可以捕获到其链接 import android.app.Activity;
import an…获取网站视频真实链接
直接上工具类
直接调用即可这个工具类会返回加载的网页中所有的链接至于对链接怎么处理就是你们自己的事了 亲测至今我所遇到的所有视频它都可以捕获到其链接 import android.app.Activity;
import android.graphics.Bitmap;
import android.net.http.SslError;
import android.os.Build;
import android.support.annotation.RequiresApi;
import android.view.ViewGroup;
import android.webkit.CookieManager;
import android.webkit.CookieSyncManager;
import android.webkit.SslErrorHandler;
import android.webkit.WebResourceRequest;
import android.webkit.WebResourceResponse;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.LinearLayout;import java.util.Timer;
import java.util.TimerTask;/*** Created by Administrator on 2018/3/22.*/public class ParseWebUrlHelper {private static ParseWebUrlHelper parseWebUrlHelper;private String webUrl;private Activity mAct;private WebView webView;private int timeOut 20 * 1000;private OnParseWebUrlListener onParseListener;public static ParseWebUrlHelper getInstance() {if (parseWebUrlHelper null) parseWebUrlHelper new ParseWebUrlHelper();return parseWebUrlHelper;}public ParseWebUrlHelper init(Activity act, String url) {this.mAct act;this.webUrl url;ViewGroup mainView (ViewGroup) mAct.findViewById(android.R.id.content);this.webView new WebView(mAct);this.webView.setLayoutParams(new LinearLayout.LayoutParams(1, 1));mainView.addView(this.webView);initWebSettings();return this;}private void initWebSettings() {WebView mWebView this.webView;mWebView.clearFocus();WebSettings mWebSettings mWebView.getSettings();mWebSettings.setJavaScriptEnabled(true);mWebSettings.setDefaultTextEncodingName(utf-8);mWebSettings.setCacheMode(WebSettings.LOAD_DEFAULT);mWebSettings.setPluginState(WebSettings.PluginState.ON);mWebSettings.setDisplayZoomControls(false);mWebSettings.setUseWideViewPort(true);mWebSettings.setAllowFileAccess(true);mWebSettings.setAllowContentAccess(true);mWebSettings.setSupportZoom(true);mWebSettings.setAllowContentAccess(true);mWebSettings.setLoadWithOverviewMode(true);mWebSettings.setBuiltInZoomControls(true);// 隐藏缩放按钮mWebSettings.setUseWideViewPort(true);// 可任意比例缩放mWebSettings.setLoadWithOverviewMode(true);// setUseWideViewPort方法设置webview推荐使用的窗口。setLoadWithOverviewMode方法是设置webview加载的页面的模式。mWebSettings.setSavePassword(true);mWebSettings.setSaveFormData(true);// 保存表单数据mWebSettings.setJavaScriptEnabled(true);mWebSettings.setTextZoom(100);mWebSettings.setDomStorageEnabled(true);mWebSettings.setSupportMultipleWindows(true);// 新加//我就是没有这一行死活不出来。MD硬是没有人写这一句if (Build.VERSION.SDK_INT Build.VERSION_CODES.LOLLIPOP) {mWebSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);}if (Build.VERSION.SDK_INT Build.VERSION_CODES.JELLY_BEAN_MR1) {mWebSettings.setMediaPlaybackRequiresUserGesture(true);}if (Build.VERSION.SDK_INT 16) {mWebSettings.setAllowFileAccessFromFileURLs(true);mWebSettings.setAllowUniversalAccessFromFileURLs(true);}mWebSettings.setJavaScriptCanOpenWindowsAutomatically(true);mWebSettings.setLoadsImagesAutomatically(true);mWebSettings.setAppCacheEnabled(true);mWebSettings.setAppCachePath(mAct.getCacheDir().getAbsolutePath());mWebSettings.setDatabaseEnabled(true);mWebSettings.setGeolocationDatabasePath(mAct.getDir(database, 0).getPath());mWebSettings.setGeolocationEnabled(true);CookieManager instance CookieManager.getInstance();if (Build.VERSION.SDK_INT 21) {CookieSyncManager.createInstance(mAct.getApplicationContext());}instance.setAcceptCookie(true);if (Build.VERSION.SDK_INT 21) {instance.setAcceptThirdPartyCookies(mWebView, true);}mWebView.setWebViewClient(new MyWebViewClient());enabledCookie(webView);//启用cookie}public ParseWebUrlHelper setLoadUrl(String url){this.webUrlurl;return this;}public ParseWebUrlHelper startParse(){webView.loadUrl(this.webUrl);return this;}/*启用cookie*/private void enabledCookie(WebView web) {CookieManager instance CookieManager.getInstance();if (Build.VERSION.SDK_INT 21) {CookieSyncManager.createInstance(mAct);}instance.setAcceptCookie(true);if (Build.VERSION.SDK_INT 21) {instance.setAcceptThirdPartyCookies(web, true);}}public ParseWebUrlHelper setOnParseListener(OnParseWebUrlListener onParseListener) {this.onParseListener onParseListener;return this;}private class MyWebViewClient extends WebViewClient {RequiresApi(api Build.VERSION_CODES.LOLLIPOP)Overridepublic boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {if(request.getUrl().toString().startsWith(intent)||request.getUrl().toString().startsWith(youku)){return true;}else{return super.shouldOverrideUrlLoading(view, request);}}Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) {if(url.startsWith(intent)||url.startsWith(youku)){return true;}else{return super.shouldOverrideUrlLoading(view, url);}}/*解决ssl证书问题*/Overridepublic void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {handler.proceed();}Overridepublic WebResourceResponse shouldInterceptRequest(WebView view, String url) {onParseListener.onFindUrl(url);return super.shouldInterceptRequest(view, url);}Overridepublic WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {if (Build.VERSION.SDK_INT Build.VERSION_CODES.LOLLIPOP) {String url request.getUrl().toString();onParseListener.onFindUrl(url);}return super.shouldInterceptRequest(view, request);}Overridepublic void onPageStarted(WebView view, String url, Bitmap favicon) {// TODO: Implement this methodsuper.onPageStarted(view, url, favicon);startConut();//加载超时处理}}/*解决webview加载超时问题*/private void startConut(){final Timer timernew Timer();TimerTask timerTasknew TimerTask(){Overridepublic void run(){onParseListener.onError(解析视频超时请检查网速或网络是否出现问题...);timer.cancel();timer.purge();}};timer.schedule(timerTask,timeOut,1);}public interface OnParseWebUrlListener {void onFindUrl(String url);void onError(String errorMsg);}
}
调用
//初始化
this.parseWebUrlHelperParseWebUrlHelper.getInstance().init(this.mAct,);
//解析网页中视频
parseWebUrlHelper.setOnParseListener(new ParseWebUrlHelper.OnParseWebUrlListener() {Overridepublic void onFindUrl(String url) {Log.d(webUrl,url);//*****处理代码}Overridepublic void onError(String errorMsg) {//****出错监听}问题
Q:webview某些视频加载不出来问题 A:http://blog.csdn.net/u013148839/article/details/65448474 Q:webview拦截请求 A:https://segmentfault.com/a/1190000006805635 Q:webview由于证书问题导致不能正常加载网页问题: A:http://blog.csdn.net/sd19871122/article/details/54632199
他人总结
1.http://www.cnblogs.com/lee0oo0/p/4026774.html
获取webview完整源码[包括iframe源码]
主要问题
动态加载
iframe嵌套
0.window也算一个frame 1.得到frame 2.判断frame的url是否已被查找 3.判断frame是否是同域名 4.同域名直接正常查找 5.不同域名直接单独加载frame的url当成一个新的页面处理 6.一直查找直到发现一个video标签
iframe链接单独打开被检测到问题
次要问题
去除Chrome反调试
无限断点反调试
参考https://blog.csdn.net/zzgzzg00/article/details/79504827
完结
编程这种事真是太容易跑偏了我明明最根本的目的就是为了获取网站视频链接的然后发现有些网站的源码获取不全然后目的就悄然变成了去获取源码然后折腾了几天依然没解决这个获取源码的问题然后猛然记起以前研究过相同的问题并且还写了一篇获取视频链接的文章这才是真正的造轮子吧明明已经研究过一次了相同的问题明明已经遇到过一次了为何这次又掉坑里了而且掉坑里几天了居然没意识过来唉笨啊真实不长记性啊到了最后才发现我获取源码的目的就是为了获取视频链接说来还是我以前写的这篇文章发挥了作用Web逆向之通过Android中WebView获取网站视频真实链接
参考
1.攻破iframe围城 2.Python爬虫关于多层嵌套iframe的解决 3.爬虫获取解决动态加载数据和frame框架问题 4.java爬虫进阶 —— ip池使用iframe嵌套异步访问破解