我正在使用Selenium编写机器人来自动评论Instagram上的照片。我的机器人点击照片,写评论,点击下一张照片,写评论,点击下一张照片,写评论等。问题是我的机器人从我的评论列表中删除其中一条评论,但它总是使用相同的混乱评论...怎么解决?如何提高我的功能,每次点击或每个帖子后选择的评论是不同的?
def randomComments(self):
messages = [
'Nice cat',
'What a lovely cat',
'Wow, great picture',
'Amaizing, I am in love <3',
'Beautiful',
'I have same cat :)'
]
r = random.randint(0, len(messages))
return messages[r]
答案 0 :(得分:1)
您可以将迭代器创建为类成员。在开始时在None
初始化,如果None
,请在整个列表中的iter
上使用random.sample
。
调用时,返回next
元素。在StopIteration
异常(当您到达列表末尾时正常)时,创建另一个包含在新迭代中的随机洗牌列表:
import random
class Foo:
messages = [
'Nice cat',
'What a lovely cat',
'Wow, great picture',
'Amaizing, I am in love <3',
'Beautiful',
'I have same cat :)'
]
def __init__(self):
self.__msgiter = None
def randomComments(self):
if self.__msgiter:
try:
return next(self.__msgiter)
except StopIteration:
pass
self.__msgiter = iter(random.sample(self.messages,len(self.messages)))
return next(self.__msgiter)
f = Foo()
for _ in range(10):
print(f.randomComments())
一个输出:
What a lovely cat
Wow, great picture
I have same cat :)
Amaizing, I am in love <3
Nice cat
Beautiful
Nice cat
What a lovely cat
Beautiful
I have same cat :)
答案 1 :(得分:0)
您每次都可以使用
返回一条新语句return random.choice(messages)
但那仍然有机会重复一线。解决方案可能是使用random.shuffle
,但如果您希望对象“记住”已使用的行,则必须在__init__
阶段执行此操作:
def __init__(self):
# add to whatever code you already have here
self.messages = [
'Nice cat',
'What a lovely cat',
'Wow, great picture',
'Amaizing, I am in love <3',
'Beautiful',
'I have same cat :)'
]
random.shuffle(self.messages)
def randomComments(self):
return self.messages.pop()
然而,一个小小的警告,如果你已经完成了一次列表运行,如果你需要继续这样做无限地考虑以其他方式添加该功能,可能会使用itertools