fix: crash
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
<link rel="icon" href="https://s3.dualstack.us-east-2.amazonaws.com/pythondotorg-assets/media/files/python-logo-only.svg" type="image/svg+xml">
|
<link rel="icon" href="https://s3.dualstack.us-east-2.amazonaws.com/pythondotorg-assets/media/files/python-logo-only.svg" type="image/svg+xml">
|
||||||
<title>Opportunity Exporter</title>
|
<title>Opportunity Export</title>
|
||||||
|
|
||||||
<textarea id="messages" name="messages" rows="45" cols="100" readonly>
|
<textarea id="messages" name="messages" rows="45" cols="100" readonly>
|
||||||
</textarea>
|
</textarea>
|
||||||
@@ -9,6 +9,12 @@ function main(url, parameters) {
|
|||||||
let ws = new WebSocket(url);
|
let ws = new WebSocket(url);
|
||||||
let messages = document.querySelector("#messages");
|
let messages = document.querySelector("#messages");
|
||||||
|
|
||||||
|
let account = new String(parameters['account']);
|
||||||
|
let name = account.split('@', 1).pop() ?? 'unknown';
|
||||||
|
|
||||||
|
name = name.charAt(0).toLocaleUpperCase() + name.slice(1);
|
||||||
|
document.title = `${name} (${account})`;
|
||||||
|
|
||||||
ws.addEventListener('message', (e) => {
|
ws.addEventListener('message', (e) => {
|
||||||
object = JSON.parse(e.data);
|
object = JSON.parse(e.data);
|
||||||
lines = Array.from(object.result);
|
lines = Array.from(object.result);
|
||||||
|
|||||||
39
main.py
39
main.py
@@ -81,9 +81,28 @@ class History(logging.Handler):
|
|||||||
self.records.clear()
|
self.records.clear()
|
||||||
return copy
|
return copy
|
||||||
|
|
||||||
|
class ConnectionContext:
|
||||||
|
def __enter__(self):
|
||||||
|
self.healthcheck()
|
||||||
|
return self
|
||||||
|
|
||||||
|
def __exit__(self, exc_type, exc, tb):
|
||||||
|
self.healthcheck()
|
||||||
|
return True
|
||||||
|
|
||||||
|
class Error(Exception):
|
||||||
|
pass
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def healthcheck(cls):
|
||||||
|
if connection.closed is not None:
|
||||||
|
raise cls.Error()
|
||||||
|
|
||||||
def main(driver: WebDriver, logger = logging.getLogger('main')):
|
def main(driver: WebDriver, logger = logging.getLogger('main')):
|
||||||
try:
|
try:
|
||||||
http = PoolManager()
|
http = PoolManager()
|
||||||
|
context = ConnectionContext()
|
||||||
|
|
||||||
driver.get(str(Path('index.html').resolve()))
|
driver.get(str(Path('index.html').resolve()))
|
||||||
endpoint = server.listeners[0]
|
endpoint = server.listeners[0]
|
||||||
parameters = vars(args)
|
parameters = vars(args)
|
||||||
@@ -109,9 +128,10 @@ def main(driver: WebDriver, logger = logging.getLogger('main')):
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
def sleep(seconds: float):
|
def sleep(seconds: float):
|
||||||
try: WebDriverWait(driver, seconds, seconds).until(lambda _: False)
|
with context:
|
||||||
except: pass
|
try: WebDriverWait(driver, seconds, seconds).until(lambda _: False)
|
||||||
return True
|
except: pass
|
||||||
|
return True
|
||||||
|
|
||||||
def locate(selector, wait=True, condition=EC.visibility_of_element_located) -> WebElement:
|
def locate(selector, wait=True, condition=EC.visibility_of_element_located) -> WebElement:
|
||||||
while True:
|
while True:
|
||||||
@@ -154,8 +174,12 @@ def main(driver: WebDriver, logger = logging.getLogger('main')):
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
until(lambda x: 'loginProgress' in x.find_element(By.TAG_NAME, "body").get_attribute('class'), watch=False)
|
until(lambda x: 'loginProgress' in x.find_element(By.TAG_NAME, "body").get_attribute('class'), watch=False)
|
||||||
locate("input.account").send_keys(parameters.get('account'))
|
account = str(parameters.get('account'))
|
||||||
locate("input#password").send_keys(parameters.get('password'))
|
password = str(parameters.get('password'))
|
||||||
|
logger.info('Logging in as %s (%s)', account.split('@', 1).pop(0).capitalize(), account)
|
||||||
|
|
||||||
|
locate("input.account").send_keys(account)
|
||||||
|
locate("input#password").send_keys(password)
|
||||||
click("input.agree-checkbox")
|
click("input.agree-checkbox")
|
||||||
click("button.login-btn")
|
click("button.login-btn")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
@@ -165,14 +189,14 @@ def main(driver: WebDriver, logger = logging.getLogger('main')):
|
|||||||
logger.info('Waiting for authentication to complete...')
|
logger.info('Waiting for authentication to complete...')
|
||||||
while True:
|
while True:
|
||||||
try:
|
try:
|
||||||
locate("#container", False)
|
locate("#container", wait=False)
|
||||||
logger.info('Done')
|
logger.info('Done')
|
||||||
break
|
break
|
||||||
except:
|
except:
|
||||||
sleep(3)
|
sleep(3)
|
||||||
|
|
||||||
ready = False
|
ready = False
|
||||||
sidebar = locate(".new-layout-left", False)
|
sidebar = locate(".new-layout-left")
|
||||||
driver.execute_script("arguments[0].remove();", sidebar)
|
driver.execute_script("arguments[0].remove();", sidebar)
|
||||||
|
|
||||||
def handle(request: NetworkRequest):
|
def handle(request: NetworkRequest):
|
||||||
@@ -288,7 +312,6 @@ async def handler(request: ws.WebSocketRequest, logger = logging.getLogger('webs
|
|||||||
|
|
||||||
if connection is None:
|
if connection is None:
|
||||||
connection = websocket
|
connection = websocket
|
||||||
logger.info('Connection established')
|
|
||||||
else:
|
else:
|
||||||
await websocket.aclose(code=1000, reason="Non-singular connection prohibited")
|
await websocket.aclose(code=1000, reason="Non-singular connection prohibited")
|
||||||
return
|
return
|
||||||
|
|||||||
Reference in New Issue
Block a user