2025-05-28 19:16:17 +08:00

87 lines
2.9 KiB
Python

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)