【问题标题】:Using 'try' and 'exept' for handaling an error in an In-stagram bot使用“try”和“except”处理 In-stagram 机器人中的错误
【发布时间】:2020-10-15 17:07:29
【问题描述】:

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

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

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

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

每次有人禁用 cmets 时都会发生错误。我正在考虑使用'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) 中调用它时使用'try'?

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

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

【问题讨论】:

  • 我不喜欢使用 try - except 子句来隐藏错误,除非您确切知道错误是如何以及为什么会导致的。如果没有,您将抑制一个错误,该错误可能稍后在代码中导致新的错误。顺便说一句,您没有发布错误是什么,完整的 Traceback 会为可能想要帮助您的人提供线索。
  • 正如Robust exception handling 上的博客指出的那样,异常是最佳实践是“在知道如何处理异常的级别上处理异常”。在这种情况下,最知道如何处理异常的是注释还是执行?如果你在评论中处理它,那么你可以引发一个不同的异常来执行以提醒它忽略评论。

标签: python python-3.x web-scraping bots instagram


【解决方案1】:

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

如果使用 Instagram API,您可以使用 is_comment_enabled 属性 (see documentation)。

类似:

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

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

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

祝你好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-08
    • 2021-08-28
    • 1970-01-01
    • 2021-07-20
    • 1970-01-01
    相关资源
    最近更新 更多