首页 > 解决方案 > 使用“try”和“exept”处理 In-stagram 机器人中的错误

问题描述

大家,我是编程新手,所以请考虑我的问题可能不是那么聪明。

我正在研究python,但与此同时,我正在查看一些代码来理解它。

我正在“创建”或更好地“应对”来自 youtube 的 Instagram 机器人。

现在我将在此处附上代码,但总而言之,我正在尝试从 Instagram 获取一些主题标签,并对每个主题标签的第一篇帖子进行点赞和评论。

每次有人禁用评论时都会发生错误。我正在考虑使用'try'和'except'来处理这个错误。但我不确定这样做的正确方法是什么

def getTopPosts(self):
    for hashtag in self.hashtags:
        self.browser.get(
            'https://www.instagram.com/explore/tags/' + hashtag + '/')
        time.sleep(2)

        links = self.browser.find_elements_by_tag_name('a')
        def condition(link): return '.com/p/' in link.get_attribute('href')
        valid_links = list(filter(condition, links))

        for i in range(0, 9):
            link = valid_links[i].get_attribute('href')
            if link not in self.links:
                self.links.append(link)

def execute(self):
    for link in self.links:
        self.browser.get(link)
        time.sleep(1)

        self.browser.execute_script(
            "window.scrollTo(0, document.body.scrollHeight);")
        time.sleep(1)

        self.comment()
        time.sleep(2)

        self.like()

        self.price += 0.02
        sleeptime = random.randint(18, 28)
        time.sleep(sleeptime)

def comment(self):
    def comment_input(): return self.browser.find_element_by_xpath(
        '/html/body/div[1]/section/main/div/div[1]/article/div[2]/section[3]/div/form/textarea')
    comment_input().click()
    comment_input().clear()

    comment = random.choice(self.comments)
    for letter in comment:
        comment_input().send_keys(letter)
        delay = random.randint(1, 7) / 30
        time.sleep(delay)

    comment_input().send_keys(Keys.RETURN)

现在我的问题是我应该在函数comment()中使用'try'还是在函数execute(self)中调用它?

我的目标是,如果注释函数中的代码无法在没有错误的情况下运行,请跳过并继续,以便程序不会在此错误时崩溃。

我希望这个问题是可以理解的。因为我是新手,所以我要求您通过分享一个示例进行回复,该示例可能可以帮助我理解如何在一般情况下执行此操作以供将来使用,只要包含示例,指向另一个来源的链接也可能很好。

标签: pythonpython-3.xweb-scrapingbotsinstagram

解决方案


在可能的情况下,最好避免创建不必要的异常。

如果使用 Instagram API,您可以使用该is_comment_enabled属性(请参阅文档)。

就像是:

def execute(self):
[...]
if self.is_comment_enabled:
    self.comment()
[...]

但是如果你正在抓取,try/except 块可能是最简单的:

def comment(self):
    try:
        [...]
    except:
        return false

祝你好运!


推荐阅读