plan291037 commited on
Commit
84b288e
·
verified ·
1 Parent(s): a8db444

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +15 -6
app.py CHANGED
@@ -8,7 +8,7 @@ from selenium.webdriver.chrome.options import Options
8
  API_KEY = os.getenv("OPENER_API_KEY", "")
9
  PROFILE = os.getenv("CHROME_PROFILE_DIR", "/tmp/chrome-profile")
10
  UA = os.getenv("UA", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36")
11
- CHROMEDRIVER = os.getenv("CHROMEDRIVER", "/usr/bin/chromedriver") # debian usually symlinks here
12
 
13
  app = FastAPI()
14
  drv = None
@@ -18,19 +18,27 @@ worker = None
18
  class OpenPayload(BaseModel):
19
  url: HttpUrl
20
 
21
- def _build_driver():
22
- os.makedirs(PROFILE, exist_ok=True)
 
 
 
 
 
 
23
  opts = Options()
24
  opts.add_argument("--headless=new")
25
  opts.add_argument("--no-sandbox")
26
  opts.add_argument("--disable-gpu")
27
  opts.add_argument("--disable-dev-shm-usage")
 
 
28
  opts.add_argument(f"--user-agent={UA}")
29
  opts.add_argument(f"--user-data-dir={PROFILE}")
30
  svc = Service(executable_path=CHROMEDRIVER)
31
  return webdriver.Chrome(service=svc, options=opts)
32
 
33
- async def _worker():
34
  while True:
35
  url = await queue.get()
36
  try:
@@ -42,10 +50,11 @@ async def _worker():
42
  @app.on_event("startup")
43
  async def startup():
44
  global drv, queue, worker
45
- drv = _build_driver()
 
46
  drv.get("data:text/html,ready")
47
  queue = asyncio.Queue()
48
- worker = asyncio.create_task(_worker())
49
  print("[startup] browser ready")
50
 
51
  @app.on_event("shutdown")
 
8
  API_KEY = os.getenv("OPENER_API_KEY", "")
9
  PROFILE = os.getenv("CHROME_PROFILE_DIR", "/tmp/chrome-profile")
10
  UA = os.getenv("UA", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36")
11
+ CHROMEDRIVER = os.getenv("CHROMEDRIVER", "/usr/bin/chromedriver")
12
 
13
  app = FastAPI()
14
  drv = None
 
18
  class OpenPayload(BaseModel):
19
  url: HttpUrl
20
 
21
+ def clean_profile(p):
22
+ os.makedirs(p, exist_ok=True)
23
+ for n in ("SingletonLock", "SingletonCookie", "SingletonSocket", "DevToolsActivePort"):
24
+ f = os.path.join(p, n)
25
+ if os.path.exists(f): os.remove(f)
26
+
27
+ def build_driver():
28
+ clean_profile(PROFILE)
29
  opts = Options()
30
  opts.add_argument("--headless=new")
31
  opts.add_argument("--no-sandbox")
32
  opts.add_argument("--disable-gpu")
33
  opts.add_argument("--disable-dev-shm-usage")
34
+ opts.add_argument("--no-first-run")
35
+ opts.add_argument("--no-default-browser-check")
36
  opts.add_argument(f"--user-agent={UA}")
37
  opts.add_argument(f"--user-data-dir={PROFILE}")
38
  svc = Service(executable_path=CHROMEDRIVER)
39
  return webdriver.Chrome(service=svc, options=opts)
40
 
41
+ async def worker_fn():
42
  while True:
43
  url = await queue.get()
44
  try:
 
50
  @app.on_event("startup")
51
  async def startup():
52
  global drv, queue, worker
53
+ os.environ["XDG_RUNTIME_DIR"] = "/tmp"
54
+ drv = build_driver()
55
  drv.get("data:text/html,ready")
56
  queue = asyncio.Queue()
57
+ worker = asyncio.create_task(worker_fn())
58
  print("[startup] browser ready")
59
 
60
  @app.on_event("shutdown")