{"title":"import time\nfrom selenium import webdriver\nfrom selenium.webdriver.common.keys import Keys\nimport json\n\nimport PySimpleGUI as sg\n\n\ndef main():\n # 创建窗口布局\n layout = [\n [sg.Image('background.png')],\n [sg.Text('关键词', font=("Arial", 12)), sg.Input(key='-KEYWORD-', size=(20, 1), font=("Arial", 12))],\n [sg.Text('评论内容', font=("Arial", 12)), sg.Input(key='-COMMENT-', size=(40, 1), font=("Arial", 12))],\n [sg.Text('弹幕内容', font=("Arial", 12)), sg.Input(key='-BARRAGE-', size=(40, 1), font=("Arial", 12))],\n [sg.Checkbox('点赞视频', key='-LIKE_VIDEO-', font=("Arial", 12))],\n [sg.Checkbox('收藏视频', key='-COLLECT_VIDEO-', font=("Arial", 12))],\n [sg.Checkbox('发送评论', key='-SEND_COMMENT-', font=("Arial", 12))],\n [sg.Checkbox('点赞评论', key='-LIKE_COMMENT-', font=("Arial", 12))],\n [sg.Text('弹幕循环次数', font=("Arial", 12)), sg.Input(key='-BARRAGE_LOOP_TIMES-', size=(10, 1), font=("Arial", 12))],\n [sg.Text('评论循环次数', font=("Arial", 12)), sg.Input(key='-COMMENT_LOOP_TIMES-', size=(10, 1), font=("Arial", 12))],\n [sg.Text('弹幕时间间隔', font=("Arial", 12)), sg.Input(key='-BARRAGE_INTERVAL-', size=(10, 1), font=("Arial", 12))],\n [sg.Text('评论时间间隔', font=("Arial", 12)), sg.Input(key='-COMMENT_INTERVAL-', size=(10, 1), font=("Arial", 12))],\n [sg.Text('每页点击的视频数量', font=("Arial", 12)), sg.Input(key='-VIDEOS_PER_PAGE-', size=(10, 1), font=("Arial", 12))],\n [sg.Text('翻页次数', font=("Arial", 12)), sg.Input(key='-PAGE_COUNT-', size=(10, 1), font=("Arial", 12))],\n [sg.Text('点赞评论次数', font=("Arial", 12)), sg.Input(key='-LIKE_COMMENT_COUNT-', size=(10, 1), font=("Arial", 12))],\n [sg.Button('开始执行', font=("Arial", 12)), sg.Button('退出', font=("Arial", 12))]\n ]\n\n # 创建窗口\n window = sg.Window('Bilibili脚本测试', layout, no_titlebar=True, grab_anywhere=True)\n\n # 设置初始颜色\n color_index = 0\n\n while True:\n event, values = window.read(timeout=100)\n\n if event == sg.WIN_CLOSED or event == '退出':\n break\n\n if event == '开始执行':\n keyword = values['-KEYWORD-']\n comment = values['-COMMENT-']\n barrage = values['-BARRAGE-']\n like_video = values['-LIKE_VIDEO-']\n collect_video = values['-COLLECT_VIDEO-']\n send_comment = values['-SEND_COMMENT-']\n like_comment = values['-LIKE_COMMENT-']\n barrage_loop_times = int(values['-BARRAGE_LOOP_TIMES-'])\n comment_loop_times = int(values['-COMMENT_LOOP_TIMES-'])\n barrage_interval = int(values['-BARRAGE_INTERVAL-'])\n comment_interval = int(values['-COMMENT_INTERVAL-'])\n videos_per_page = int(values['-VIDEOS_PER_PAGE-'])\n page_count = int(values['-PAGE_COUNT-'])\n like_comment_count = int(values['-LIKE_COMMENT_COUNT-'])\n\n # 使用cookie登录\n driver = webdriver.Chrome()\n driver.get('https://www.bilibili.com')\n\n f = open('cookie.txt', 'r')\n listcookie = json.loads(f.read()) # 读取文件中的cookies数据\n\n for cookie in listcookie:\n driver.add_cookie(cookie) # 将cookies数据添加到浏览器\n driver.refresh() # 刷新网页\n\n # 输入搜索关键词\n search_input = driver.find_element_by_xpath("//input[@class='nav-search-input']")\n search_input.send_keys(keyword)\n time.sleep(0.1)\n\n # 按回车键进行搜索\n search_input.send_keys(Keys.ENTER)\n time.sleep(0.1)\n\n # 获取当前窗口句柄\n current_window = driver.current_window_handle\n\n # 切换到新打开的窗口\n for window_handle in driver.window_handles:\n if window_handle != current_window:\n driver.switch_to.window(window_handle)\n break\n\n elements = None\n video_count = 0 # 记录点击的视频标题数量\n page_num = 0 # 记录当前页数\n\n while True:\n try:\n if elements is None:\n # 第一次打开页面时获取视频标题元素列表\n elements = driver.find_elements_by_xpath("//h3[@class='bili-video-card__info--tit']")\n else:\n # 翻页后重新获取视频标题元素列表\n elements = driver.find_elements_by_xpath("//h3[@class='bili-video-card__info--tit']")\n\n if video_count >= videos_per_page:\n # 当所有视频标题都已点击过后,翻页\n video_count = 0\n page_num += 1\n if page_num > page_count:\n break\n\n next_page_button = driver.find_element_by_xpath(\n "//[@id='i_cecream']/div/div[2]/div[2]/div/div/div/div[3]/div/div/button[10]")\n next_page_button.click()\n time.sleep(1)\n continue\n\n # 在这里执行你想要的操作,例如获取元素文本、点击元素等\n element = elements[video_count]\n print(element.text) # 打印元素文本\n element.click() # 点击元素\n time.sleep(1)\n\n # 获取当前窗口句柄\n current_window = driver.current_window_handle\n # 切换到第三个窗口\n window_handle = driver.window_handles[2]\n driver.switch_to.window(window_handle)\n # 获取当前页面的URL\n current_url = driver.current_url\n\n if like_video:\n # 视频点赞\n video_like_button = driver.find_element_by_xpath("//[@id ='arc_toolbar_report']/div[1]/div[1]")\n video_like_button.click()\n time.sleep(1)\n\n if collect_video:\n # ��频收藏\n video_collection_button = driver.find_element_by_xpath(\n "//[@id='arc_toolbar_report']/div[1]/div[3]")\n video_collection_button.click()\n time.sleep(3)\n video_collection1_button = driver.find_element_by_xpath(\n "//[@id='arc_toolbar_report']/div[3]/div/div/div[2]/div/ul/li/label")\n video_collection1_button.click()\n time.sleep(1)\n video_collection2_button = driver.find_element_by_xpath(\n "//[@id ='arc_toolbar_report']/div[3]/div/div/div[3]/button")\n video_collection2_button.click()\n time.sleep(2)\n\n for _ in range(barrage_loop_times):\n if barrage:\n # 编辑弹幕\n barrage_input = driver.find_element_by_xpath(\n "//[@id='bilibili-player']/div/div/div[1]/div[2]/div/div[2]/div[3]/div[1]/input")\n barrage_input.click()\n barrage_input.send_keys(barrage)\n time.sleep(2)\n # 发送弹幕\n barrage_button = driver.find_element_by_xpath(\n "//[@id='bilibili-player']/div/div/div[1]/div[2]/div/div[2]/div[3]/div[2]")\n barrage_button.click()\n time.sleep(barrage_interval)\n\n for _ in range(comment_loop_times):\n if send_comment:\n # 编辑评论\n comment_input = driver.find_element_by_xpath(\n "//[@id ='comment']/div/div/div/div[2]/div[1]/div/div/div[2]/textarea")\n comment_input.click()\n comment_input.send_keys(comment)\n time.sleep(1)\n # 点击发送评论\n comment_button = driver.find_element_by_xpath(\n "//[@id ='comment']/div/div/div/div[2]/div[1]/div/div/div[3]")\n comment_button.click()\n time.sleep(comment_interval)\n if like_comment_count > 0:\n # 点赞评论\n like_button = driver.find_element_by_xpath(\n "//[@id ='comment']/div/div/div/div[2]/div[2]/div[1]/div[2]/div[2]/div[3]/div/span[2]/i")\n like_button.click()\n time.sleep(1)\n like_comment_count -= 1\n\n # 关闭当前窗口,回到搜索结果页面\n driver.close()\n driver.switch_to.window(driver.window_handles[1])\n\n video_count += 1\n except Exception as e:\n print(str(e))\n break\n\n # 关闭浏览器\n driver.quit()\n\n # 自动轮换字体颜色\n if event == 'TIMEOUT':\n color_index += 1\n if color_index > 6:\n color_index = 1\n\n # 根据颜色索引设置字体颜色\n if color_index == 1:\n window['-KEYWORD-'].update(text_color='red')\n elif color_index == 2:\n window['-KEYWORD-'].update(text_color='orange')\n elif color_index == 3:\n window['-KEYWORD-'].update(text_color='yellow')\n elif color_index == 4:\n window['-KEYWORD-'].update(text_color='green')\n elif color_index == 5:\n window['-KEYWORD-'].update(text_color='blue')\n elif color_index == 6:\n window['-KEYWORD-'].update(text_color='purple')\n\n window.close()\n\n\nif name == 'main':\n main()


原文地址: https://www.cveoy.top/t/topic/pLll 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录