没有运行环境的可以参考这篇: https://www.jinke.love/4753.html
nnnn功能演示
nnnn完整代码
nnnn代码使用Python3编写的自动关注程序,使用了Selenium和Tkinter库,还使用多线程处理关闭浏览器和结束Tkinter应用程序。
程序打开浏览器并访问特定网站,并与网页交互,点击按钮和滚动页面。使用Tkinter创建右下角弹出窗口,显示操作结果。程序使用多线程,一个线程运行Selenium和Tkinter任务,另一个线程负责主Tkinter窗口。
使用此源码时,需要下载安装好谷歌浏览器,并且使用谷歌浏览器登录好CSDN账号,再将源码浏览器缓存路径改为自己的浏览器缓存路径。
import threadingnimport timenimport tkinter as tknfrom selenium import webdrivernfrom selenium.common.exceptions import TimeoutExceptionnfrom selenium.webdriver import ActionChainsnfrom selenium.webdriver.common.by import Bynfrom selenium.webdriver.support import expected_conditions as ECnfrom selenium.webdriver.support.ui import WebDriverWaitnclass PopupWindow:n def __init__(self, master):n self.master = mastern self.popup = tk.Toplevel()n self.popup.wm_overrideredirect(True) # 隐藏窗口边框和标题栏n self.popup.wm_attributes('-topmost', 1) # 窗口置顶n self.popup_frame = tk.Frame(self.popup)n self.popup_frame.pack()n self.popup_text = tk.Text(self.popup_frame, wrap='word')n self.popup_text.pack(side='left', fill='both', expand=True)n self.scrollbar = tk.Scrollbar(self.popup_frame, command=self.popup_text.yview)n self.scrollbar.pack(side='right', fill='y')n self.popup_text.config(yscrollcommand=self.scrollbar.set)n self.set_window_position()n def set_window_position(self):n screen_width = self.master.winfo_screenwidth()n screen_height = self.master.winfo_screenheight()n window_width = 200n window_height = 100n self.popup.geometry(n f'{window_width}x{window_height}+{screen_width - window_width - 10}+{screen_height - window_height - 10}')n def update_content(self, message):n self.popup_text.insert('end', message + '\n')n self.popup_text.see('end') # 滚动到最底部ndef getTab(driverObj):n div_element = WebDriverWait(driverObj, 10).until(n EC.visibility_of_element_located((By.CLASS_NAME, 'blog-nav-box'))n )n action = ActionChains(driverObj)n action.move_to_element(div_element).perform()n # 找到div元素下的所有a标签n a_elements = div_element.find_elements(By.TAG_NAME, 'a')n return [tabname.text for tabname in a_elements]ndef changeTab(driverObj, tabName, popupWindow):n try:n parent_div = WebDriverWait(driverObj, 5).until(n EC.visibility_of_element_located((By.CLASS_NAME, 'blog-nav-box')))n action = ActionChains(driverObj)n action.move_to_element(parent_div).perform()n top_tab = WebDriverWait(driverObj, 5).until(n EC.element_to_be_clickable((By.XPATH, f'//a[text()="{tabName}"]')))n action.move_to_element(top_tab).click().perform() # 模拟鼠标移动到顶部标签并点击n except TimeoutException:n returnndef followUser(driverObj, tabName, popupWindow):n try:n fnum = 0n sipder = WebDriverWait(driverObj, 5).until(EC.visibility_of_element_located((By.CLASS_NAME, 'template-cont')))n if not sipder:n returnn recommendations = WebDriverWait(driverObj, 5).until(n EC.presence_of_all_elements_located((By.CLASS_NAME, 'recommendation')))n for recommendation in recommendations:n follow_button = recommendation.find_element(By.CLASS_NAME, 'recommendation-btn')n if 'active' not in follow_button.get_attribute('class'):n follow_button.click()n fnum += 1n popupWindow.update_content(f'{tabName}关注量:{fnum}')n except Exception as e:n popupWindow.update_content(f'{tabName}侧栏未显示')n returnndef run_selenium_and_tkinter(popupWindow):n options = webdriver.ChromeOptions()n options.add_argument('--start-maximized')n options.add_argument('user-data-dir=C:\\Users\zhangjinke\AppData\Local\Google\Chrome\\User Data')n options.add_experimental_option('detach', True)n driver = webdriver.Chrome(options=options)n driver.get('https://blog.csdn.net')n tablist = getTab(driver)n # 其他代码保持不变n try:n for tabname in tablist:n popupWindow.update_content('当前标签页: ' + tabname)n changeTab(driver, tabname, popupWindow)n followUser(driver, tabname, popupWindow) # 将tabName传递给followUsern # time.sleep(1)n driver.execute_script('window.scrollTo(0, 0)')n finally:n # 关闭浏览器并结束所有进程n close_all_processes(driver, root, popupWindow.popup)ndef close_all_processes(driver, root, popup):n driver.quit() # 关闭浏览器n root.destroy() # 结束Tkinter主窗口n popup.destroy() # 关闭提示窗口nif __name__ == '__main__':n root = tk.Tk()n root.withdraw() # 隐藏Tkinter主窗口n popup_window = PopupWindow(root)n # 创建线程来运行Selenium和Tkintern selenium_thread = threading.Thread(target=run_selenium_and_tkinter, args=(popup_window,))n selenium_thread.start()n popup_window.update_content('主任务启动成功')n root.protocol('WM_DELETE_WINDOW', lambda: [root.destroy(), popup_window.popup.destroy()]) # 处理窗口关闭事件n root.mainloop()
n
Comments NOTHING