# -*-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__); @app.route('/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();