import selenium from flask import Flask, render_template, request from selenium import webdriver from selenium.webdriver.common.desired_capabilities import DesiredCapabilities from selenium.webdriver.firefox.options import Options driver_options = Options() driver_options.add_argument('--headless') driver_options.add_argument('--no-sandbox') browser = selenium.webdriver.remote.webdriver.WebDriver(command_executor="http://172.18.0.2:4444", desired_capabilities=DesiredCapabilities.EDGE, options=driver_options) app = Flask(__name__) @app.route('/') def hello_world(): return 'shipxy decoder' @app.route('/decode') def decode(): return render_template('./templates/decode.html') @app.route('/api/decode', methods=['post']) def decodeApi(): try: # 注意!这里 get 的 url 只能以最终部署在容器内部的容器内 IP 作为域名,否则模拟浏览器无法获知页面内容。 # 这主要是因为本工程在部署时与模拟浏览器分处不同的容器中,因此只能将本工程容器和模拟浏览器的容器创建在同一个 docker network 下 browser.get('http://172.18.0.2:5000/decode') except: try: browser.start_session(capabilities=DesiredCapabilities.EDGE) browser.get('http://172.18.0.2:5000/decode') except: return '500' data = request.get_data() # inputEle.send_keys(bytes.decode(data)) js = 'var txt = document.getElementById("encode");txt.value="%s";' % bytes.decode(data) browser.execute_script(js) button = browser.find_element_by_id('decode') button.click() inputEle = browser.find_element_by_id('encode') text = inputEle.get_attribute('value') # browser.close() return text @app.route('/decode_track') def decode_track(): return render_template('./templates/decode_track.html') @app.route('/api/decode_track', methods=['post']) def decodeTrackApi(): try: browser.get('http://172.18.0.2:5000/decode_track') except: try: browser.start_session(capabilities=DesiredCapabilities.EDGE) browser.get('http://172.18.0.2:5000/decode') except: return '500' data = request.get_data() # inputEle.send_keys(bytes.decode(data)) js = 'var txt = document.getElementById("encode");txt.value="%s";' % bytes.decode(data) browser.execute_script(js) button = browser.find_element_by_id('decode') button.click() inputEle = browser.find_element_by_id('encode') text = inputEle.get_attribute('value') # browser.close() return text @app.route('/api/getvalue') def decodeApi2(): inputEle = browser.find_element_by_id('encode') text = inputEle.text return text if __name__ == '__main__': app.run(host='0.0.0.0', port=5000)