Python Tkinter开发Instagram自动评论bot 评论随机及延迟设置问题求解
问题1:随机评论功能异常
故障根因
你从Tkinter输入框获取的comments.get()是完整的原始字符串,直接传入comment函数后,comment_custom[randint(0, len(comment_custom)-1)]是对字符串做索引取值,自然只能拿到单个字符。
修复方案
在comment函数开头添加字符串拆分逻辑,按逗号分割成评论列表,同时自动去除评论前后的空格、过滤空值:
def comment(driver, comment_custom,hashtags,count): # 新增拆分逻辑 comment_list = [c.strip() for c in comment_custom.split(',') if c.strip()] # 原有代码不变 url = "https://www.instagram.com/explore/tags/"+ hashtags driver.get(url) wait = WebDriverWait(driver,10) path = "/html/body/div[1]/section/main/article/div[1]/div/div/div[1]/div[1]/a/div/div[2]" first_photo = wait.until(EC.presence_of_element_located((By.XPATH,path))) first_photo.click() time.sleep(1) next_button1st = driver.find_element_by_xpath("/html/body/div[6]/div[1]/div/div/div/button") next_button1st.click() time.sleep(1) for i in range (int(count)): #comments on photo path = "/html/body/div[6]/div[2]/div/article/div/div[2]/div/div/div[2]/section[3]/div/form/textarea" comment = wait.until(EC.presence_of_element_located((By.CLASS_NAME,"Ypffh"))) comment.click() time.sleep(1) commet_text = wait.until(EC.presence_of_element_located((By.CLASS_NAME, "Ypffh"))) # 随机选取评论的地方改为从拆分后的列表取值 comment = comment_list[randint(0, len(comment_list)-1)] commet_text.send_keys(comment) #post comment button post_button = wait.until( EC.element_to_be_clickable((By.XPATH, "//button[contains(.,'Post')]"))) post_button.click() time.sleep(1) next_button2st = wait.until(EC.presence_of_element_located((By.XPATH,"/html/body/div[6]/div[1]/div/div/div[2]/button"))) next_button2st.click()
问题2:随机延迟设置报错
故障根因
用户输入的延迟参数是用逗号分隔的字符串(如1,5),无法直接转为int类型;同时randint方法要求传入两个参数(区间最小值、最大值),你的调用方式也不符合要求。
修复方案
先对延迟字符串做拆分处理,转为两个整数后再传入randint:
# 拆分延迟参数 min_delay, max_delay = [int(x.strip()) for x in delay.split(',')] time.sleep(randint(min_delay, max_delay))
如果需要兼容异常输入,可以添加校验逻辑:
delay_parts = [x.strip() for x in delay.split(',')] if len(delay_parts) >=2 and all(x.isdigit() for x in delay_parts): min_delay = int(delay_parts[0]) max_delay = int(delay_parts[1]) time.sleep(randint(min_delay, max_delay)) else: # 输入不合法时用默认延迟 time.sleep(3)
内容的提问来源于stack exchange,提问作者CoderToBeWon
相关产品推荐
相关产品推荐

