zooey 2 rokov pred
rodič
commit
3513055e41

+ 14 - 1
INNNews/general_clickbot_local.py

@@ -73,7 +73,7 @@ def run_once(q):
     global driver
     result = []
     user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
-    s = Service('/Users/zooeytsai/Downloads/chromedriver 4')
+    s = Service('C:\/Users\/s1301\/Downloads\/chromedriver_108\/chromedriver')
     options = webdriver.ChromeOptions()
     options.add_argument('--headless')
     # options.add_argument('--remote-debugging-port=9222')
@@ -114,3 +114,16 @@ class JParams(object):
 if __name__ == '__main__':
     fire.Fire(JParams)
 
+
+cursor=db.query('select json from seo_jobs where cust="KNIGHT" and plan="形象SEO" order by rand() limit 1')
+for c in cursor:
+    js=json.loads(c['json'])
+    prefix=js['prefix']
+    postfix=js['postfix']
+    domain=js['domain'][0]
+    positive=js['positive']
+    rnd=js['rnd']
+
+kw1=random.choice(positive)
+kw2=random.choice(rnd)
+kw=prefix+" "+kw1+" "+kw2

+ 16 - 16
INNNews/notifytest.py

@@ -33,21 +33,21 @@ def send_msg(kw):
     send_message = GA_innnews.main()
     params = {"message": kw+send_message['message']}
     print('通知結果',params)
-    r = requests.post("https://notify-api.line.me/api/notify",headers=headers, params=params)
-
-while True:
-    db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/seo?charset=utf8mb4')
-    cursor=db.query('SELECT * FROM seo.general_log where domain = "innews.com.tw" and datediff(now(),dt)=0 order by dt desc')
-    result="\n"
-    idx=0
-    for c in cursor:
-        idx+=1
-        if idx<=3:
-            elmt=c['kw']
-            result+="["+str(c['ranking'])+"]:"+elmt+"\n"
-    
-    msg="\n機器人執行次數:"+str(idx)
-    send_msg(msg+result)
-    time.sleep(1800)
+    # r = requests.post("https://notify-api.line.me/api/notify",headers=headers, params=params)
+
+
+db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/seo?charset=utf8mb4')
+cursor=db.query('SELECT * FROM seo.nda_log where domain = "innews.com.tw" and datediff(now(),dt)=0 order by dt desc')
+result="\n"
+idx=0
+for c in cursor:
+    idx+=1
+    if idx<=3:
+        elmt=c['kw']
+        result+="["+str(c['ranking'])+"]:"+elmt+"\n"
+
+msg="\n機器人執行次數:"+str(idx)
+send_msg(msg+result)
+time.sleep(1800)
 
 # schtasks /create /sc minute /mo 30 /sd 2022/05/050 /st 9:00 /et 23:00 /tn "linebat" /tr "C:\tmp\inn_line.bat"

+ 72 - 85
SEO/clickbot_100.py

@@ -2,14 +2,14 @@ import random
 import sys
 import dataset
 from selenium import webdriver
+from selenium.webdriver.chrome.service import Service
+from selenium.webdriver.common.by import By
 import traceback
 import datetime
 import codecs
 import time
 import urllib
 import argparse
-import schedule
-
 import logging
 import sys
 from logging.handlers import SysLogHandler
@@ -17,100 +17,87 @@ import socket
 import pandas as pd
 import socket
 import os
-_LOG_SERVER = ('hhh.ptt.cx', 514)
-logger = logging.getLogger('clickbot_100')
-handler1 = SysLogHandler(address=_LOG_SERVER,socktype=socket.SOCK_DGRAM)
-logger.addHandler(handler1)
-#logger.debug('[clickbot_100][清原]begin')
-
-hname=socket.gethostname()
-pid=str(os.getpid())
-logger.fatal('[clickbot_100]['+hname+']['+pid+']begin')
-
+import dataset
+import pymysql
+pymysql.install_as_MySQLdb()
 
+driver = None
 def restart_browser():
+    global driver
+    user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
+    s = Service('C:\/Users\/s1301\/Downloads\/chromedriver_107\/chromedriver')
     options = webdriver.ChromeOptions()
-    options.add_argument('--headless') 
-    driver=webdriver.Chrome(options=options)
-    driver.set_window_size(950,6000)
+    options.add_argument('--headless')
+    # options.add_argument('--remote-debugging-port=9222')
+    # options.add_experimental_option("debuggerAddress", "192.168.192.45:9922")
+    options.add_argument("--user-agent=" + user_agent)
+    options.add_argument("--incognito")
+    # options.add_argument('--proxy-server=socks5://172.104.93.163:41800')
+    driver = webdriver.Chrome(
+        options=options, service=s)
+    str1 = driver.capabilities['browserVersion']
+    print('版本', str1)
+    driver.delete_all_cookies()
+    driver.set_window_size(1400, 20000)
     return driver
 
-
 def process_one():
     db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/seo?charset=utf8mb4')
-    lst=[]
+    lst=['123']
     table=db['google_rank']
-    cursor = db.query('select term from seo.selected_kw')
+    # cursor = db.query('select term from seo.selected_kw where client="鑫富"')
+    # cursor = db.query('select term from seo.selected_kw where id between 1902 and 1923')
     # cursor=db.query('select term from selected_kw and term not in (SELECT distinct(keyword) FROM ig_tags.save_result where url like "%beastparadise.net%" and datediff(now(),dt)=0)')
-    for c in cursor:
-        lst.append(c['term'])
-
-    term=random.choice(lst)
-    print(term)
-    logger.debug('[clickbot_100]['+term+']')
-    driver=restart_browser()
-    escaped_search_term=urllib.parse.quote(term)
-    googleurl = 'https://www.google.com/search?q={}&num={}&hl={}'.format(escaped_search_term, 100,'zh-TW')
-
-    print(googleurl)
-    driver.get(googleurl)
-    time.sleep(6)
-    fname=term.replace(' ','_')
-    # driver.save_screenshot('c:/tmp/seo/'+fname+'.png')
-    df=pd.DataFrame()
-    # driver.get_screenshot_as_file("/Users/zooeytsai/排名100.png")
-    elmts=driver.find_elements_by_xpath("//div[@class='yuRUbf']/a")
+    # for c in cursor:
+    #     lst.append(c['term'])
+    db.close()
+    domain = 'vickybrain.com'
+    for term in lst:
+        print(term)
+        driver=restart_browser()
+        escaped_search_term=urllib.parse.quote(term)
+        googleurl = 'https://www.google.com/search?q={}&num={}&hl={}'.format(escaped_search_term, 100,'zh-TW')
+        driver.get(googleurl)
+        time.sleep(60)
+        print(driver.current_url)
+        driver.save_screenshot('C:\/Users\/s1301\/Pictures\/Saved Pictures\/鑫富\/'+term+'.png')
+        df=pd.DataFrame()
+        elmts=driver.find_elements(By.XPATH,"//div[@class='yuRUbf']/a")
+        print('結果數量',len(elmts))
+        cnt=1
+        datadict={'搜尋詞':[],'結果標題':[],'結果網址':[],'結果名次':[]}
+
+        for elmt in elmts:
+            try:
+                href=elmt.get_attribute('href')
+                if domain in href:
+                    # table.insert({'title':elmt.text,'url':href,'keyword':term,'dt':datetime.datetime.now(),'ranking':cnt})
+                    print(href)
+                    print(elmt.text)
+                datadict['搜尋詞'].append(term)
+                datadict['結果標題'].append(elmt.text)
+                datadict['結果網址'].append(href)
+                datadict['結果名次'].append(str(cnt))
+
+                cnt+=1
+            except:
+                print('href2 exception')
+                traceback.print_exc()
+
+        if len(datadict['結果標題'])<=0:
+            print('None')
+            driver.quit()
+            sys.exit()
+        df['搜尋詞']=datadict['搜尋詞']
+        df['結果標題']=datadict['結果標題']
+        df['結果網址']=datadict['結果網址']
+        df['結果名次']=datadict['結果名次']
+
+        df.to_excel('C:\/Users\/s1301\/Pictures\/Saved Pictures\/鑫富\/'+term+".xls")
 
-    clickelmt=None
-    cnt=1
-    datadict={'搜尋詞':[],'結果標題':[],'結果網址':[],'結果名次':[]}
-    
-    for elmt in elmts:
-        try:
-            href=elmt.get_attribute('href')
-            if 'taroboba-yuan.com' in href:
-                clickelmt=elmt
-                logger.debug('[clickbot_100]['+term+']['+str(cnt)+']')
-
-            print(href)
-            print(elmt.text)
-            datadict['搜尋詞'].append(term)
-            datadict['結果標題'].append(elmt.text)
-            datadict['結果網址'].append(href)
-            datadict['結果名次'].append(str(cnt))
-
-            table.insert({'title':elmt.text,'url':href,'keyword':term,'dt':datetime.datetime.now(),'num':cnt})
-            cnt+=1
-        except:
-            print('href2 exception')
-            traceback.print_exc()
-    if clickelmt:
-        webdriver.ActionChains(driver).move_to_element(clickelmt).perform()
-        webdriver.ActionChains(driver).move_to_element(clickelmt).click().perform()
-    if len(datadict['結果標題'])<=0:
-        print('None')
         driver.quit()
-        sys.exit()
-    df['搜尋詞']=datadict['搜尋詞']
-    df['結果標題']=datadict['結果標題']
-    df['結果網址']=datadict['結果網址']
-    df['結果名次']=datadict['結果名次']
-
-    df.to_excel('/Users/zooeytsai/'+fname+".xls")
-
-    driver.quit()
-
+        print('等待')
+        time.sleep(random.randint(100,120))
 process_one()
 
-parser = argparse.ArgumentParser()
-parser.add_argument('--loop')
-args = parser.parse_args()
-
-if args.loop:
-
-#    schedule.every(6).minutes.do(process_one)
-    schedule.every(0.4).minutes.do(process_one)
 
-    while True:
-        schedule.run_pending()
-        time.sleep(1)

+ 108 - 0
SEO/clickbot_100_one.py

@@ -0,0 +1,108 @@
+import random
+import sys
+import dataset
+from selenium import webdriver
+from selenium.webdriver.chrome.service import Service
+from selenium.webdriver.common.by import By
+import traceback
+import datetime
+import codecs
+import time
+import urllib
+import argparse
+import logging
+import sys
+from logging.handlers import SysLogHandler
+import socket
+import pandas as pd
+import socket
+import os
+import dataset
+import pymysql
+pymysql.install_as_MySQLdb()
+
+driver = None
+def restart_browser():
+    global driver
+    user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
+    s = Service('C:\/Users\/s1301\/Downloads\/chromedriver_107\/chromedriver')
+    options = webdriver.ChromeOptions()
+    options.add_argument('--headless')
+    # options.add_argument('--remote-debugging-port=9222')
+    # options.add_experimental_option("debuggerAddress", "192.168.192.45:9922")
+    options.add_argument("--user-agent=" + user_agent)
+    options.add_argument("--incognito")
+    # options.add_argument('--proxy-server=socks5://172.104.93.163:41800')
+    driver = webdriver.Chrome(options=options, service=s)
+    =====================================
+
+options = webdriver.ChromeOptions()
+options.add_argument("--no-sandbox")
+options.add_argument('--headless')
+options.add_argument("--disable-dev-shm-usage")
+options.add_experimental_option('prefs', {'intl.accept_languages': 'en,en_US'})
+options.add_argument('--remote-debugging-port=9222')
+# options.add_experimental_option("debuggerAddress", f"127.0.0.1:{q[2]}")
+options.add_argument("--user-agent=" + user_agent)
+options.add_argument("--incognito")
+driver = webdriver.Chrome(executable_path='/root/chromedriver',options=options)
+
+    str1 = driver.capabilities['browserVersion']
+    driver.delete_all_cookies()
+    driver.set_window_size(1400, 20000)
+    return driver
+
+def process_one():
+    lst=['123']
+    date='1205_1'
+    for term in lst:
+        driver=restart_browser()
+        escaped_search_term=urllib.parse.quote(term)
+        googleurl = 'https://www.google.com/search?q={}&num={}&hl={}'.format(escaped_search_term, 100,'zh-TW')
+        driver.get(googleurl)
+        time.sleep(6)
+        print(driver.current_url)
+
+        driver.save_screenshot('C:\/Users\/s1301\/Pictures\/Saved Pictures\/'+date+term+'.png')
+        df=pd.DataFrame()
+        elmts=driver.find_elements(By.XPATH,"//div[@class='yuRUbf']/a")
+        cnt=1
+        datadict={'搜尋詞':[],'結果標題':[],'結果網址':[],'結果名次':[]}
+
+        for elmt in elmts:
+            try:
+                href=elmt.get_attribute('href')
+                datadict['搜尋詞'].append(term)
+                datadict['結果標題'].append(elmt.text)
+                datadict['結果網址'].append(href)
+                datadict['結果名次'].append(str(cnt))
+
+                cnt+=1
+            except:
+                print('href2 exception')
+                traceback.print_exc()
+
+        if len(datadict['結果標題'])<=0:
+            print('None')
+            driver.quit()
+            sys.exit()
+        df['搜尋詞']=datadict['搜尋詞']
+        df['結果標題']=datadict['結果標題']
+        df['結果網址']=datadict['結果網址']
+        df['結果名次']=datadict['結果名次']
+
+        df.to_excel('C:\/Users\/s1301\/Pictures\/Saved Pictures\/'+date+term+".xls")
+
+        driver.quit()
+        print('等待')
+        time.sleep(random.randint(100,120))
+process_one()
+
+
+os.system('docker container stop tiny8')
+time.sleep(3)
+os.system('docker container rm tiny8')
+time.sleep(3)
+os.system('docker run -d -p 9924:9222 --rm --shm-size="900m" --name tiny1 chromedp/headless-shell')
+time.sleep(3)
+

+ 35 - 0
SEO/csv_to_sql.py

@@ -0,0 +1,35 @@
+import pandas as pd
+import dataset
+import pymysql
+pymysql.install_as_MySQLdb()
+
+# df = pd.read_csv(r"C:\/Users\/s1301\/Documents\/關鍵字建議.csv",engine='python')
+
+
+db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/seo?charset=utf8mb4')
+table=db['seo_jobs']
+client='護佳'
+domain=''
+# for index,row in df.iterrows():
+# with open("C:\/Users\/s1301\/Documents\/關鍵字建議.csv") as f:
+#     data_all = f.readlines()
+f = open("C:\/Users\/s1301\/Documents\/關鍵字建議.csv")
+df = pd.read_csv(f)
+df=df.fillna('')
+# print(df)
+for index,row in df.iterrows():
+    prefix='"'+row['prefix']+'"'
+    positive='"'+row['positive']+'"'
+    domain='"'+row['URL']+'"'
+    rnd='"'+str(row['rnd'])+'"'
+    postfix='""'
+    data = f'"prefix":{prefix},"postfix":{postfix},"positive":[{positive}],"domain":[{domain}],"rnd":[{rnd}]'
+    json='{'+data+'}'
+    print(json)
+    table.insert({'cust':client,'plan':'形象SEO','json':json})
+    # table.insert({'term':row['kw'],'client':client,'domain':domain})
+
+{"prefix": "護佳", "postfix": "", "domain": ["www.hujiai-international.com"], "positive": ["細胞食物","紅蔘"], "rnd": [""]}
+
+db.close()
+

+ 16 - 0
SEO/mysql_to_redis.py

@@ -0,0 +1,16 @@
+import dataset
+import pymysql
+pymysql.install_as_MySQLdb()
+import redis
+
+
+db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/seo?charset=utf8mb4')
+table=db['selected_kw']
+lst = []
+cur = db.query('select term,domain from seo.selected_kw where client="鑫富"')
+for c in cur:
+    lst.append([c['term'],c['domain']])
+
+print(lst)
+# r = redis.Redis(host='db.ptt.cx', port=6379, db=1,password='choozmo9')
+# r.set(lst)

+ 53 - 0
SEO/notify_nda.py

@@ -0,0 +1,53 @@
+import redis
+import time
+import json
+from selenium import webdriver
+from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
+import time
+import os
+import urllib.parse
+from selenium.webdriver.support.ui import WebDriverWait
+from selenium.webdriver.common.by import By
+from selenium.webdriver.support import expected_conditions as EC
+import codecs
+import random
+from bs4 import BeautifulSoup
+import requests
+import dataset
+import time
+import rpyc
+import sys
+import docker
+import pymysql
+pymysql.install_as_MySQLdb()
+from monitor import GA_innnews
+
+headers = {
+        "Authorization": "Bearer " + "zsaS4I79fkbun9LLF8mQmeHL4PlEtBtN7OLzTp8m72Y",
+        "Content-Type": "application/x-www-form-urlencoded"
+}
+
+
+
+def send_msg(kw):
+    send_message = GA_innnews.main()
+    params = {"message": kw+send_message['message']}
+    print('通知結果',params)
+    # r = requests.post("https://notify-api.line.me/api/notify",headers=headers, params=params)
+
+
+db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/seo?charset=utf8mb4')
+cursor=db.query('SELECT * FROM seo.nda_log where domain = "innews.com.tw" and datediff(now(),dt)=0 order by dt desc')
+result="\n"
+idx=0
+for c in cursor:
+    idx+=1
+    if idx<=3:
+        elmt=c['kw']
+        result+="["+str(c['ranking'])+"]:"+elmt+"\n"
+
+msg="\n機器人執行次數:"+str(idx)
+send_msg(msg+result)
+time.sleep(1800)
+
+# schtasks /create /sc minute /mo 30 /sd 2022/05/050 /st 9:00 /et 23:00 /tn "linebat" /tr "C:\tmp\inn_line.bat"

+ 7 - 4
SEO/ranking_report.py

@@ -3,8 +3,8 @@ import dataset
 import pymysql
 pymysql.install_as_MySQLdb()
 
-name='辜琪鈞'
-date = '1128'
+name='瑞福'
+date = 'start'
 
 
 def day():
@@ -18,10 +18,13 @@ def day():
 
     rank_lst = []
     for i in kw_lst:
-        cursor_general = db.query(f'select kw,ranking from seo.general_log where kw = "{i}" order by dt desc limit 1')
+        cursor_general = db.query(f'select kw,ranking from seo.general_log where kw = "{i}" order by dt limit 1')
         for c in cursor_general:
             rank_lst.append([c['kw'],c['ranking']])
     db.close()
     df1 = pd.DataFrame(rank_lst,columns=['kw','ranking'])
-    df_result = pd.merge(df, df1, on='kw', how='outer').fillna(0)
+    df_result = pd.merge(df, df1, on='kw', how='outer').fillna(101)
     df_result.to_csv(f"C:\/Users\/s1301\/Documents\/{date}{name}關鍵字排名.csv", index=False)
+    print('完成')
+
+day()

+ 242 - 0
SEO/ranking_world.py

@@ -0,0 +1,242 @@
+# import redis
+import time
+import traceback
+# import json
+from selenium import webdriver
+from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
+import time
+import os
+from selenium.webdriver.support.ui import WebDriverWait
+from selenium.webdriver.common.by import By
+from selenium.webdriver.support import expected_conditions as EC
+import dataset
+from selenium.webdriver.common.keys import Keys
+import json
+import random
+import time
+import redis
+import sys
+import codecs
+import pandas as pd
+import random
+import os
+import time
+import datetime
+from selenium.webdriver.chrome.service import Service
+import dataset
+import pymysql
+
+pymysql.install_as_MySQLdb()
+
+from userAgentRandomizer import userAgents
+import requests
+
+driver = None
+
+db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/seo?charset=utf8mb4')
+
+headers = {
+    "Authorization": "Bearer " + "6SDULL1Ebklduc6TFxa97AFto5Sj21kyJ30CxiLiSoi",
+    "Content-Type": "application/x-www-form-urlencoded"
+}
+
+
+def send_msg(kw):
+    params = {"message": kw}
+    r = requests.post("https://notify-api.line.me/api/notify", headers=headers, params=params)
+
+
+def re_get_webdriver():
+    global port
+    global driver
+    result = []
+    if driver is not None:
+        print('closing....')
+        driver.quit()
+        os.system('killall chrome')
+        print('quit....')
+        driver = None
+    try:
+        ua = userAgents()
+
+        user_agent = ua.random()
+
+        options = webdriver.ChromeOptions()
+        options.add_argument("--no-sandbox")
+        options.add_argument("--disable-dev-shm-usage")
+        options.add_argument("--headless")
+        print(user_agent)
+        options.add_experimental_option('prefs', {'intl.accept_languages': 'en,en_US'})
+        options.add_argument("--incognito")
+        driver = None
+        try:
+            if os.name == 'nt':
+                driver = webdriver.Chrome(options=options)
+
+            else:
+                driver = webdriver.Chrome(
+                    executable_path=r'C:\Users\Administrator\Downloads\chromedriver_108\chromedriver', options=options)
+        except:
+            traceback.print_exc()
+            return
+        driver.delete_all_cookies()
+        driver.set_window_size(950, 20000)
+        return
+    except:
+        traceback.print_exc()
+        driver = None
+        return None
+
+
+def scrolling(driver, pgnum):
+    ub = driver.find_element_by_css_selector('body')
+    for i in range(pgnum):
+        ub.send_keys(Keys.PAGE_DOWN)
+        if pgnum > 1:
+            time.sleep(0.3)
+
+
+def run_once(jsobj):
+    table = db['google_rank']
+    print(jsobj)
+    global driver
+
+    i = 100
+    if driver is None:
+        time.sleep(8)
+        re_get_webdriver()
+    if driver is None:
+        return
+    try:
+        kw = jsobj['kw']
+        fname = jsobj['fname']
+
+        if jsobj.get('domain') is None:
+            exclude = jsobj['exclude']
+            domain = None
+        else:
+            domain = jsobj['domain']
+            exclude = None
+        city_map = {'chicago': ['42.04866173771369', '-87.68260072643513'],
+                    'miami': ['25.764458843530548', '-80.19787522585152'],
+                    'wc': ['38.96071674051165', '-77.03155367248387'],
+                    'ny': ['40.76774141099703', '-73.98439238945637']}
+        city = jsobj['fname']
+        print(city)
+        Map_coordinates = dict({
+            "latitude": float(city_map[f"{city}"][0]),
+            "longitude": float(city_map[f"{city}"][1]),
+            "accuracy": 100
+        })
+
+        # 芝加哥、邁阿密、紐約、華盛頓
+        driver.execute_cdp_cmd("Emulation.setGeolocationOverride", Map_coordinates)
+        driver.get('https://www.google.com?num=100&lr=lang_en')
+
+        time.sleep(3)
+        print(driver.current_url)
+        elmt = driver.find_element(By.XPATH, "//input[@name='q']")
+        time.sleep(1)
+        elmt.send_keys(kw)
+
+        elmt.send_keys(Keys.ENTER)
+        time.sleep(6)
+
+        elmts = driver.find_elements(By.XPATH, "//div[@class='yuRUbf']/a")
+        numresults = len(elmts)
+        print('搜尋結果數量', numresults)
+        # driver.save_screenshot('C:\/Users\/s1301\/Pictures\/Saved Pictures\/' + fname + ".png")
+        if numresults == 0:
+            send_msg('stop working...')
+            sys.exit()
+        datadict = {'搜尋詞': [], '結果標題': [], '結果網址': [], '結果名次': [], '結果說明': []}
+        df = pd.DataFrame()
+
+        idx = 1
+        found = False
+        test_lst = []
+        txt_dict = {}
+        for elmt in elmts:
+            href = elmt.get_attribute('href')
+            txt = elmt.text
+            desc = None
+            try:
+                elmt2 = elmt.find_element(By.XPATH, "./../../..//div[@data-content-feature=1]")
+                desc = elmt2.text
+            except:
+                desc = None
+            #            print(desc)
+            table.insert(
+                {'title': elmt.text, 'url': href, 'keyword': kw, 'dt': datetime.datetime.now(), 'ranking': idx})
+            datadict['搜尋詞'].append(kw)
+            datadict['結果標題'].append(txt)
+            datadict['結果網址'].append(href)
+            datadict['結果名次'].append(str(idx))
+            datadict['結果說明'].append(desc)
+
+            if len(txt) > 10:
+                if domain is not None:
+                    for d in domain:
+                        if d in href:
+                            print('found....')
+                            print('clicked....')
+                            print(href)
+                            print(txt)
+                            print("ranking", idx)
+                            found = True
+                            return
+                else:
+                    ex = False
+                    for ee in exclude:
+                        if ee in href:
+                            ex = True
+                    if not ex:
+                        test_lst.append(elmt)
+                        txt_dict[elmt] = txt
+
+            idx += 1
+
+        if exclude is not None:
+            print('exclude')
+            elmt = random.choice(test_lst[5:])
+            print(elmt)
+            print(txt_dict[elmt])
+
+            webdriver.ActionChains(driver).move_to_element(elmt).perform()
+            #            elmt.click()
+            webdriver.ActionChains(driver).move_to_element(elmt).click().perform()
+            time.sleep(5)
+
+        if not found:
+            table.insert(
+                {'ranking': -1, 'kw': kw, 'results': numresults, 'url': '', 'title': '未收錄', 'descrption': desc})
+
+        df['搜尋詞'] = datadict['搜尋詞']
+        df['結果標題'] = datadict['結果標題']
+        df['結果網址'] = datadict['結果網址']
+        df['結果名次'] = datadict['結果名次']
+        df['結果說明'] = datadict['結果說明']
+
+        # df.to_excel('C:\/Users\/s1301\/Pictures\/Saved Pictures\/'+fname+".xls")
+
+
+
+
+    except:
+        print('exception')
+        traceback.print_exc()
+    #    time.sleep(9999)
+    #    driver.save_screenshot('c:/tmp/seo/'+kw+".png")
+
+    driver.quit()
+    sys.exit()
+
+
+class JParams(object):
+
+    def get(self, jsobj):
+        run_once(jsobj)
+
+
+if __name__ == '__main__':
+    fire.Fire(JParams)

+ 6 - 0
SEO/run_ranking_world.py

@@ -0,0 +1,6 @@
+import os
+
+
+
+city = ['ny','chicago','miami','wc']
+os.system(f'python3 general_clickbot_proxy.py get --jso="{kw}" --domain="{domain}" --port="{str(pport)}"')

+ 32 - 0
SEO/sns_rank_report.py

@@ -0,0 +1,32 @@
+import pandas as pd
+import dataset
+import pymysql
+pymysql.install_as_MySQLdb()
+
+name='superlink'
+date = '1206'
+
+
+def day():
+    db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/seo?charset=utf8mb4')
+    cursor = db.query(f'select term, url from seo.sns_kw where client ="{name}"')
+    kw_lst = []
+    for c in cursor:
+        kw_lst.append([c['term'],c['url']])
+    print(kw_lst)
+    df = pd.DataFrame(kw_lst,columns=['kw','url'])
+
+    rank_lst = []
+    for i in kw_lst:
+        # print(i)
+        kw = i[0]
+        url = i[1]
+        cursor_general = db.query(f'select kw,url,ranking from seo.sns_log where kw = "{kw}" and url="{url}" order by dt desc limit 1')
+        for c in cursor_general:
+            rank_lst.append([c['kw'],c['url'],c['ranking']])
+    db.close()
+    df1 = pd.DataFrame(rank_lst,columns=['kw','url','ranking'])
+    df_result = pd.merge(df, df1, on=['kw','url'], how='outer').fillna(0)
+    df_result.to_csv(f"C:\/Users\/s1301\/Documents\/{date}{name}關鍵字排名.csv", index=False)
+
+day()