BILIBILI自动评论机器人 Python+Selenium

本人水平有限,只能手动登陆之后,再运行程序进行评论。而且不是科班出身,有些逻辑可能存在问题,然后就靠try:except:勉强把程序运行下去。欢迎指正。

如果有想推广数字货币交易平台BIteget,可以私信或评论,让技术创造财富。

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time

#计数
global n_done
n_done = 0
global n_verify
n_verify = 0

#读取关键词
keys_search_ls = []
f = open(r"bilibili.txt","r",encoding='utf-8')
line = f.readline()
line = line[:-1]
keys_search_ls.append(line)
while line:   
    line = f.readline()    
    line = line[:-1]
    keys_search_ls.append(line)
keys_search_ls = keys_search_ls[:-1]
print(keys_search_ls)
f.close()

#文案
keys_sent = '''币安合约大赛,瓜分美元奖励
臻享交易费9折优惠
币安官网地址
https://www.binancezh.io/zh-CN/futures/ref/147939788(开通合约&现货)
https://accounts.binancezh.ch/zh-CN/register?ref=QMFJ24WH(开通矿池)
赚钱了别忘回来点个赞哦(^_^*)'''

#睡眠
sleep_1 = 1
sleep_5 = 5
sleep_60 = 5
sleep_1800 = 900

#控制已打开的网页并最大化
options = Options()
options.add_experimental_option("debuggerAddress", "127.0.0.1:9527")
browser = webdriver.Chrome(options=options)
print(browser.title)
browser.maximize_window()    

while True:       
    
    #按关键词搜索
    for k in range(len(keys_search_ls)): 
        try:
            keys_search = keys_search_ls[k]                          
            browser.find_element_by_xpath('//*[@id="search-keyword"]').click()
            browser.find_element_by_xpath('//*[@id="search-keyword"]').clear()
            browser.find_element_by_xpath('//*[@id="search-keyword"]').send_keys(keys_search)
            time.sleep(sleep_1)
            browser.find_element_by_xpath('//*[@id="server-search-app"]/div/div[1]/div[1]/div/div/div/div[2]').click()
            time.sleep(sleep_5)        
        except:
            continue  
        
        #逐页作业      
        for j in range(5):
            try:
                if j==0:                         
                    div = browser.find_element_by_xpath('//*[@id="all-list"]/div[1]/div[2]/ul/li[1]/a/div/div[1]/img')
                else:
                    div = browser.find_element_by_xpath('//*[@id="all-list"]/div[1]/ul/li[1]/a/div/div[1]/img')
                #滑动滚动条到某个指定的元素
                js4 = "arguments[0].scrollIntoView();" 
                #将下拉滑动条滑动到当前div区域
                browser.execute_script(js4, div)
            except:
                try:
                    browser.execute_script('window.scrollBy(0,1200)')
                    time.sleep(sleep_1)                    
                    if j==0:
                        browser.find_element_by_xpath('//*[@id="all-list"]/div[1]/div[3]/div/ul/li[9]/button').click()
                        time.sleep(sleep_5)                       
                    elif j==1 or j==2:
                        browser.find_element_by_xpath('//*[@id="all-list"]/div[1]/div[2]/div/ul/li[10]/button').click()
                        time.sleep(sleep_5)                       
                    #回到顶端
                    js_top = "var q=document.documentElement.scrollTop=0"
                    browser.execute_script(js_top)
                    time.sleep(sleep_1)
                    continue
                except:
                    break
            
            #逐个进入视频
            for i in range(20):
                try:
                    if j==0:
                        browser.find_element_by_xpath('//*[@id="all-list"]/div[1]/div[2]/ul/li['+str(i+1)+']/div/div[1]/a').click()                        
                    else:
                        browser.find_element_by_xpath('//*[@id="all-list"]/div[1]/ul/li['+str(i+1)+']/div/div[1]/a').click()
                    time.sleep(sleep_5)                            
                    #转换控制的页面
                    handles = browser.window_handles
                    browser.switch_to_window(handles[1])
                    print(browser.title)
                    time.sleep(sleep_1)                                          
                    #滚动
                    browser.execute_script('window.scrollBy(0,800)')
                    time.sleep(sleep_5)                        
                    #清理、输入并发送
                    browser.find_element_by_xpath('//*[@id="comment"]/div/div[2]/div/div[3]/div[2]/textarea').click()
                    browser.find_element_by_xpath('//*[@id="comment"]/div/div[2]/div/div[3]/div[2]/textarea').clear()
                    now = time.strftime('%Y-%m-%d %H:%M:%S')
                    browser.find_element_by_xpath('//*[@id="comment"]/div/div[2]/div/div[3]/div[2]/textarea').send_keys(keys_sent+'\n'+now)
                    time.sleep(sleep_1)
                    browser.find_element_by_xpath('//*[@id="comment"]/div/div[2]/div/div[3]/div[2]/button').click()
                    time.sleep(sleep_5)                        
                    try:                            
                        browser.find_element_by_xpath('//*[@id="bili-wordverify-box"]/div[2]/div/i').click()
                        print('Verify'+str(j)+'_'+str(i))
                        n_verify += 1
                        print('done'+str(n_done))
                        print('verify'+str(n_verify))
                        time.sleep(sleep_1800)                            
                    except:                            
                        print('DONE'+str(j)+'_'+str(i)+'______'+now)
                        n_done+=1
                        print('done'+str(n_done))
                        print('verify'+str(n_verify))
                        time.sleep(sleep_60)
                except:
                    pass                                             
                #关闭当前页面并转换控制权
                browser.close()
                handles = browser.window_handles
                browser.switch_to_window(handles[0])
                print(browser.title)
                time.sleep(sleep_1)                        
                #滚动
                if i>4 and i<15:
                    browser.execute_script('window.scrollBy(0,20)')
                    time.sleep(sleep_1) 
            
            #翻页
            try:                         
                browser.execute_script('window.scrollBy(0,200)')
                time.sleep(sleep_1)                    
                if j==0:
                    browser.find_element_by_xpath('//*[@id="all-list"]/div[1]/div[3]/div/ul/li[9]/button').click()
                    time.sleep(sleep_5)                       
                elif j==1 or j==2:
                    browser.find_element_by_xpath('//*[@id="all-list"]/div[1]/div[2]/div/ul/li[10]/button').click()
                    time.sleep(sleep_5)                       
                #回到顶端
                js_top = "var q=document.documentElement.scrollTop=0"
                browser.execute_script(js_top)
                time.sleep(sleep_1)               
            except:
                break                      

上一篇:MMDetection框架学习


下一篇:面试官灵魂三问:什么是SOA?什么是微服务?SOA和微服务有什么区别?