所以基本上我有一个用于检查网站更改等的监视器 - https://helloworld.com/password - 检查每隔xx分钟以查看网址是否已更改。
过了一段时间它结束了:
HTTPSConnectionPool: Max retries ex
urllib3.connection.VerifiedHTTPSConnection object at 0x00000001A46BC8
60] A connection attempt failed because the connected party did not p
onnection failed because connected host has failed to respond',))
基本上我的代码看起来非常简单:
def checker(url):
while True:
keep_checking = requests.get('https://{}.com'.format(url))
if ('password' in keep_checking.url):
randomtime = random.randint(6, 60)
log(Fore.WHITE + 'Password still up on %s, retrying in %d secs' % (url, randomtime))
time.sleep(randomtime)
else:
log(Fore.GREEN + '%s\'s Password page is gone!!' % url)
break
所以基本上我怎样才能重试脚本以在Max重试失败后继续检查?我想也许解决方案是再次运行该方法?
答案 0 :(得分:1)
正如J. Owens建议的那样,您可以使用try
/ except
块从异常中恢复,这样如果发生异常,except
块将使程序继续while
循环的开头。
为了实现这一目标,请替换:
keep_checking = requests.get('https://{}.com'.format(url))
使用:
keep_checking = None
try:
keep_checking = requests.get('https://{}.com'.format(url))
except requests.ConnectionError:
print("Received ConnectionError. Retrying...")
continue
请注意,通过此代码更改,while
循环将永远循环,因此您可能希望将循环限制为特定次数的尝试。
答案 1 :(得分:0)
您似乎正在根据错误消息汇总不存在的网址。
代码中的以下行不会在初始url中产生“password”,除非正确组装的url会将您重定向到优雅,这是值得怀疑的。
keep_checking = requests.get('https://{}.com'.format(url))
根据您的参数网址,您可能需要提供完整的网址,而不是预定义的 https 和 .com
很难说您是否尝试按原样运行此代码(作为更大文件的一部分),或者在此处修改它以进行粘贴。但总的来说,打开一个已知的url来查看url更改是否显得异常,并且实际上只能在优雅地重定向您的页面上工作。在这种情况下,您可以“只”检查正确的300块或404响应代码300 Response codes
假设您正在尝试查看是否重定向到另一个页面(这要求您正在点击的网址会正确执行此操作而不会抛出例如404)
你应该例如将其更改为以下
keep_checking = requests.get(url)
并提供完整的网址,例如“https://www.hello-world.com/password” 现在,如果此页面不存在,您可能会被重定向,那么可能最终会出现在不包含密码的页面上。
可能会发生大量错误,重定向,超时,404s aso。鉴于您可能不想将其用于静态网页,您应该尝试捕捉一些常见问题,而不仅仅是您现在看到的错误。