首页 > 解决方案 > 如何获得单击事件的响应以使用 Python 处理 Selenium 上的异常?

问题描述

我正在使用 Selenium 自动对 Instagram 上的帖子进行一些评论操作。流程如下:脚本等待textarea可以点击,然后点击它,写评论,等待“发布”按钮可以点击,然后点击它。然而,即使我限制了很少的评论(20 条评论/小时)并在两者之间留出足够的时间,但时不时地所有内容都可以点击,但评论不会通过,并且底部会显示一个小横幅点击“发布”后页面显示“无法发表评论”,然后文本区域不再可点击。
这是我的一段代码:

...
try:
    comment_post = WebDriverWait(self.webdriver, 10).until(
                   EC.element_to_be_clickable((By.CSS_SELECTOR, "button[type='submit']")))
    if comment_post.text == "Post":
        comment_post.click()
        sleep(random.randint(2,5))
        return
...

问题是,即使没有发布评论,try声明也会通过,因为该.click()操作是可用的。如何获得点击的响应(“无法发表评论”),以便我可以引发异常并让应用程序等待它再次可用或刷新页面或其他什么?

标签: pythonseleniumbotsinstagram

解决方案


单击后,您将不得不等待并搜索横幅的存在。如果您找到横幅,则引发异常。

像这样的东西:

comment_post.click()
try:
    nocommentbanner = WebDriverWait(self.webdriver, 10).until(
               EC.visibility_of_element_located((By.SOMEHOW, someway)))
    # banner found
    # comment fail
    # maybe raise CommentFailed()
except TimeoutException:
    # banner not found
    # comment success
    # perhaps do nothing

推荐阅读