python - 不明白为什么这段时间没有停止
问题描述
我有一个硒机器人在社交网络上执行操作。我希望它在他做了一定数量的动作后停止(例如 10 个)。我以这种方式初始化变量:
def __init__(self):
self.browser = webdriver.Firefox()
self.counter_var = int(0)
self.max_var = int(10)
这是执行和计数动作的部分:
def action(self, accounts):
for account in accounts[9:]:
try:
self.browser.get(account)
time.sleep(5)
like_button = self.browser.find_element_by_xpath(
u'//button[contains(@class, "Heart")]').click()
self.count_actions()
print(self.counter_var)
except selenium.common.exceptions.NoSuchElementException:
break
def count_actions(self):
self.counter_var += 1
这是我试图进入 main 的循环:
while self.counter_var < self.max_var:
searched_category = random.choice(pool_categories)
accounts = self.load_category(searched_category)
self.action(accounts)
然而,机器人永远不会停止,即使counter_var
到达10
。
你知道如何纠正吗?
解决方案
由于缺少给出的代码,目前无法对您的问题给出具体答案,但看起来问题是因为该action()
方法在其中的循环执行时没有检查。self.counter_var
for
像下面这样的东西可能会起作用。添加yield
到action()
方法中会将其转换为生成器函数,从而使其可迭代。完成后,它将在其for
循环的每次迭代中有效地“暂停”,并允许调用者检查self.counter_var
(或它想要在每次迭代中执行的任何其他内容)的当前值。
以下是我建议的一些解释性评论:
class Class:
def action(self, accounts):
for account in accounts[9:]:
try:
self.browser.get(account)
time.sleep(5)
like_button = self.browser.find_element_by_xpath(
u'//button[contains(@class, "Heart")]').click()
self.count_actions()
print(self.counter_var)
yield # Added.
except selenium.common.exceptions.NoSuchElementException:
break
def count_actions(self):
self.counter_var += 1
def main(self):
while True:
searched_category = random.choice(pool_categories)
accounts = self.load_category(searched_category)
for _ in self.action(accounts): # Iterate through account checks.
if self.counter_var < self.max_var: # Too many actions?
break
推荐阅读
- postgresql - 通过 Terraform 在 VPC(私有 RDS)中运行 SQL 查询
- cloudflare - 在 CloudFlare 中调整 IPFS 资产的图像下载大小
- python-2.7 - 如何修复 Google App Engine dev_appserver.py:watcher_ignore_re 标志“不是 JSON 可序列化”错误?
- gitlab - Gitlab-ci:如果 MR 存在则触发 merge_request 分离管道,如果不存在则触发源分支管道。这两条管道不应同时运行
- php - 选择单选按钮后提交到数据库,Codeigniter 4
- firebase - 每次在初始化状态下如何获取当前用户地址?
- javascript - 我正在尝试应用位置粘性,但它仅适用于 Iphone
- barcode - Android 设备上的 USB 条码扫描器
- laravel - Laravel 自定义数据透视表名称和自定义模型表
- c# - 正则表达式在“|”之后提取字符串