Я пытаюсь создать этого бота для комментариев, где он комментирует, а комментарии не повторяются сами по себе

#python #selenium #selenium-webdriver #bots

Вопрос:

 
#this is the section where I think I need help

def random_comment():
    with open('comments.txt', 'r') as f:
        comments = [line.strip() for line in f]
    comment = random.choice(comments)
    return comment        

    #comment=============================

    for url in urls:
        print('Commenting to this post ---> '   url)
        comment = random_comment()
        bot.get(url)
        bot.implicitly_wait(1)
        time.sleep(5)

        bot.find_element_by_xpath('//*[@id="react-root"]/section/main/div/div/article/div[3]/section[1]/span[2]/button').click()

        if doesnt_exist(bot, '//*[@id="react-root"]/section/main/section/div'):
            print('Skipped - comments disabled')
        else:
            find_textarea = (
                By.XPATH, '//*[@id="react-root"]/section/main/section/div/form/textarea')
            WebDriverWait(bot, 50).until(
                EC.presence_of_element_located(find_textarea)
            )                                         
            comment_box = bot.find_element(*find_textarea)
            WebDriverWait(bot, 50).until(
                EC.element_to_be_clickable(find_textarea)
            )
            comment_box.click()
            comment_box.send_keys(comment)

       
 

Комментарии содержатся в файле с именем .txt
comments.txt для этой цели тестирования комментарии составляют 1,2,….,10, которые каждый номер в своей строке.
Я хочу, чтобы бот-комментатор комментировал их без повторения цифр.
если возможно, даже удалите номер после комментария.

Ответ №1:

Если вы хотите сделать выбор, не повторяясь, вы можете сделать следующее:

  1. Читать comments.txt всего один раз и сохраните список всех комментариев в переменной.
  2. Сделав выбор, вам нужно удалить этот выбор из списка всех комментариев.

Например:

 class Comments:
   def __init__(self):
     with open('comments.txt', 'r') as f:
       self.comments = [line.strip() for line in f]

   def choice_comment(self):
     comment = random.choice(self.comments)
     self.comments.remove(comment)
     return comment
 

Если вы хотите удалить номер из комментария (если файл выглядит так:

 1. One comment
2. Two comment
........
10. Ten comment
 

), вы можете разделить строку на точки и соединить все строки обратно без первой (это число):

 comment = '. '.join(comment.split('. ')[1:])
 

Комментарии:

1. это дает мне эту ошибку: ошибка имени: имя » я » не определено

2. Если в вашем коде нет классов, вы не можете использовать self в своем коде, и вам нужно переписать код и использовать функции, поэтому вам нужно поместить код в функцию init вне любых функций без»self». (вы делаете переменные «комментарии» глобальными). Также вам нужно удалить «self» из функции choice_comment.