zooeytsai 2 년 전
부모
커밋
07521ff382
2개의 변경된 파일71개의 추가작업 그리고 44개의 파일을 삭제
  1. 63 44
      web/main.py
  2. 8 0
      web/static/ranking.html

+ 63 - 44
web/main.py

@@ -28,8 +28,9 @@ import traceback
 import time
 from selenium.webdriver.common.keys import Keys
 from selenium.webdriver.common.by import By
-# import pymysql
-# pymysql.install_as_MySQLdb()
+from selenium.webdriver.chrome.service import Service
+import pymysql
+pymysql.install_as_MySQLdb()
 
 driver = None
 
@@ -127,56 +128,74 @@ async def func_expand(kw: str = Form(...),kw2:Optional[str] = Form(None),kw3:Opt
     return RedirectResponse(url="/tree_list",status_code=302)
 #    return HTMLResponse('<html><head><meta http-equiv="refresh" content="0; URL="/tree_list" /></head></html>')
 
-    
-@app.post("/ranking/")
-async def ranking(kw: str = Form(...), domain:str = Form(...)):
-    global driver
+
+def restart_browser():
+    os.system('docker container stop p4444')
+    time.sleep(1)
+    os.system('docker container rm p4444')
+    time.sleep(1)
+    os.system('docker run -d -p ' + '4458' + ':4444 --name p4444 --add-host=host.docker.internal:host-gateway --shm-size="2g" selenium/standalone-chrome:103.0')
+    time.sleep(18)
     options = webdriver.ChromeOptions()
     options.add_argument("--no-sandbox")
     options.add_argument("--disable-dev-shm-usage")
     options.add_argument('--headless')
-    driver = webdriver.Chrome(options=options)
+    ddriver = webdriver.Remote(command_executor='http://127.0.0.1:4458/wd/hub',options=options)
     driver.set_window_size(950, 20000)
+    return driver
+    
+@app.post("/ranking/")
+async def ranking(kw: str = Form(...), domain:str = Form(...),kw2:Optional[str] = Form(None),domain2:Optional[str] = Form(None),kw3:Optional[str] = Form(None),domain3:Optional[str] = Form(None),kw4:Optional[str] = Form(None),domain4:Optional[str] = Form(None),kw5:Optional[str] = Form(None),domain5:Optional[str] = Form(None)):
+    kwlst = []
+    kwlst.append([kw,domain])
+    if kw2 is not None:
+        kwlst.append([kw2,domain2])
+    if kw3 is not None:
+        kwlst.append([kw3,domain3])
+    if kw4 is not None:
+        kwlst.append([kw4,domain4])
+    if kw5 is not None:
+        kwlst.append([kw5,domain5])
+    result = []
+    for i in kwlst:
+        driver = restart_browser()
+        # escaped_search_term=urllib.parse.quote(term)
+        googleurl = 'https://www.google.com/?num=100'
+        driver.get(googleurl)
+        time.sleep(6)
+        send_kw_elmt = driver.find_element(By.XPATH,
+                                           '/html/body/div[1]/div[3]/form/div[1]/div[1]/div[1]/div/div[2]/input')
+        send_kw_elmt.send_keys(i[0])
+        time.sleep(3)
+        send_kw_elmt.send_keys(Keys.ENTER)
+        time.sleep(6)
+        elmts = driver.find_elements_by_xpath("//div[@class='yuRUbf']/a")
+
+        cnt = 1
+        datadict = {'搜尋詞': [], '結果標題': [], '結果網址': [], '結果名次': []}
+        domain_name = i[1]
+        for elmt in elmts:
+            try:
+                href = elmt.get_attribute('href')
+                if domain_name in href:
+                    datadict['搜尋詞'].append(i[0])
+                    datadict['結果標題'].append(elmt.text)
+                    datadict['結果網址'].append(href)
+                    datadict['結果名次'].append(str(cnt))
+                cnt += 1
+            except:
+                print('href2 exception')
+                traceback.print_exc()
+        result.append(datadict)
+        print(domain_name)
+        print(datadict)
+        driver.quit()
+        print('數量',len(elmts))
+        time.sleep(30)
 
-    # db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/seo?charset=utf8mb4')
-    db_local = dataset.connect('mysql://root:jondae350@localhost/ig_tags')
-    table = db_local['google_rank']
-
-    # escaped_search_term=urllib.parse.quote(term)
-    googleurl = 'https://www.google.com/?num=100'
-    driver.get(googleurl)
-    time.sleep(6)
-    send_kw_elmt = driver.find_element(By.XPATH,
-                                       '/html/body/div[1]/div[3]/form/div[1]/div[1]/div[1]/div/div[2]/input')
-    send_kw_elmt.send_keys(kw)
-    time.sleep(3)
-    send_kw_elmt.send_keys(Keys.ENTER)
-    time.sleep(6)
-    elmts = driver.find_elements_by_xpath("//div[@class='yuRUbf']/a")
-
-    cnt = 1
-    datadict = {'搜尋詞': [], '結果標題': [], '結果網址': [], '結果名次': []}
-
-    for elmt in elmts:
-        try:
-            href = elmt.get_attribute('href')
-            if domain in href:
-                datadict['搜尋詞'].append(kw)
-                datadict['結果標題'].append(elmt.text)
-                datadict['結果網址'].append(href)
-                datadict['結果名次'].append(str(cnt))
-            cnt += 1
-        except:
-            print('href2 exception')
-            traceback.print_exc()
-
-    driver.quit()
-    time.sleep(60)
-    # db.close()
-    db_local.close()
     # return "ok"
     # return RedirectResponse(url="/ranking_result",)
-    html = "<html><body><h2>"+str(datadict)+"</br></br>"
+    html = f"<html><body>{result}</body></html>"
     return html
 
 @app.get("/ranking_result/")

+ 8 - 0
web/static/ranking.html

@@ -3,6 +3,14 @@
         <form action="/ranking" method="post">
             KW: <input type="text" id="kw" name="kw" value=""></br>
             domain: <input type="text" id="domain" name="domain" value=""></br>
+            KW2: <input type="text" id="kw2" name="kw2" value=""></br>
+            domain2: <input type="text" id="domain2" name="domain2" value=""></br>
+            KW3: <input type="text" id="kw3" name="kw3" value=""></br>
+            domain3: <input type="text" id="domain3" name="domain3" value=""></br>
+            KW4: <input type="text" id="kw4" name="kw4" value=""></br>
+            domain4: <input type="text" id="domain4" name="domain4" value=""></br>
+            KW5: <input type="text" id="kw5" name="kw5" value=""></br>
+            domain5: <input type="text" id="domain5" name="domain5" value=""></br>
             <input type="submit" value="開始">
         </form>
     </br>