|
|
@@ -0,0 +1,93 @@
|
|
|
+# -*-coding:utf-8-*-
|
|
|
+
|
|
|
+import time
|
|
|
+from selenium import webdriver
|
|
|
+# from seleniumwire import webdriver
|
|
|
+from selenium.webdriver.chrome.options import Options
|
|
|
+# 通过Keys模拟键盘
|
|
|
+from selenium.webdriver.common.keys import Keys
|
|
|
+from flask import Flask, jsonify, render_template
|
|
|
+from flask import request as flask_request
|
|
|
+
|
|
|
+g_browser_type = 1;
|
|
|
+
|
|
|
+app = Flask(__name__);
|
|
|
+
|
|
|
[email protected]('/proxy', methods=['POST'])
|
|
|
+def proxy():
|
|
|
+ if not flask_request.is_json:
|
|
|
+ return jsonify({'code': 100, 'message': '请使用JSON数据格式'}), 400;
|
|
|
+ data = flask_request.get_json();
|
|
|
+ if 'url' not in data:
|
|
|
+ return jsonify({'code': 101, 'message': '缺少参数url'}), 200;
|
|
|
+ url = data['url'];
|
|
|
+ headers = None;
|
|
|
+ timeout = 10;
|
|
|
+ needs = [];
|
|
|
+ user_agent = flask_request.headers.get('User-Agent');
|
|
|
+ if 'needs' in data:
|
|
|
+ needs = data['needs'];
|
|
|
+ if 'headers' in data:
|
|
|
+ headers = data['headers'];
|
|
|
+ if 'timeout' in data:
|
|
|
+ headers = data['timeout'];
|
|
|
+ if g_browser_type == 1:
|
|
|
+ executable_path = r'./chrome-headless-shell-win64/chrome-headless-shell.exe';
|
|
|
+ options = Options();
|
|
|
+ options.add_argument("--headless"); # 如果你想在无头模式下运行
|
|
|
+ if user_agent:
|
|
|
+ options.add_argument('user-agent=' + user_agent)
|
|
|
+ options.binary_location = executable_path;
|
|
|
+ # 加载策略为'eager',等待页面的所有资源完全加载完成,包括图片等
|
|
|
+ options.page_load_strategy = 'eager'; # 或者'normal'或者'none'
|
|
|
+ driver = webdriver.Chrome(options=options);
|
|
|
+ else:
|
|
|
+ executable_path = r'./phantomjs-2.1.1-windows/bin/phantomjs.exe';
|
|
|
+ driver = webdriver.PhantomJS(executable_path=executable_path);
|
|
|
+ # driver.implicitly_wait(timeout);
|
|
|
+ driver.get(url);
|
|
|
+ final_url = None;
|
|
|
+ rsp_headers = None;
|
|
|
+ content = None;
|
|
|
+ try:
|
|
|
+ # driver_wait = WebDriverWait(driver,timeout);
|
|
|
+ # element = driver_wait.until(lambda x: x.find_element_by_xpath(Xpath));
|
|
|
+
|
|
|
+ # 获取最终重定向后的URL
|
|
|
+ final_url = driver.current_url;
|
|
|
+ content = driver.page_source;
|
|
|
+ # 获取HTTP头部信息
|
|
|
+ rsp_headers = None;
|
|
|
+ # for one_req in driver.requests:
|
|
|
+ # if one_req.response:
|
|
|
+ # print(
|
|
|
+ # one_req.url,
|
|
|
+ # one_req.response.status_code,
|
|
|
+ # one_req.response.headers
|
|
|
+ # );
|
|
|
+ except Exception as e:
|
|
|
+ print(e);
|
|
|
+ finally:
|
|
|
+ driver.close();
|
|
|
+ driver.quit();
|
|
|
+ result = {
|
|
|
+ 'url': final_url,
|
|
|
+ 'headers': None,
|
|
|
+ 'content': None,
|
|
|
+ };
|
|
|
+ if 'headers' in needs:
|
|
|
+ result['headers'] = rsp_headers;
|
|
|
+ else:
|
|
|
+ del result['headers'];
|
|
|
+ if 'content' in needs:
|
|
|
+ result['content'] = content;
|
|
|
+ else:
|
|
|
+ del result['content'];
|
|
|
+ return jsonify({'code': 200, 'data': result,'message': '成功'}), 200;
|
|
|
+
|
|
|
+def main():
|
|
|
+ app.config['DEBUG'] = True;
|
|
|
+ app.run(host='0.0.0.0', port=5000);
|
|
|
+
|
|
|
+if __name__ == '__main__':
|
|
|
+ main();
|