shawenguan 1 éve
szülő
commit
fad1bff1ba
1 módosított fájl, 93 hozzáadás és 0 törlés
  1. 93 0
      BrowserProxy/main.py

+ 93 - 0
BrowserProxy/main.py

@@ -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();