如何绕过区域限制网站避免API崩溃,继续执行Selenium截图任务?
解决方法
1. 异常捕获与强制跳过
给网站访问、截图的核心代码块加上异常捕获逻辑,覆盖所有可能出现的网络错误(连接超时、访问被拒、HTTP 403/503等状态码)。捕获到异常后,记录该网站的错误信息,直接跳过当前任务,继续处理下一个网站。
以Python+Pyppeteer为例:
import csv from pyppeteer import launch async def capture_single_site(url): browser = None try: browser = await launch() page = await browser.newPage() # 设置30秒超时,避免长时间阻塞 await page.goto(url, timeout=30000) await page.screenshot({'path': f'{url.split("//")[-1].replace("/", "_")}.png'}) return (url, "截图成功") except Exception as e: # 记录具体错误类型,方便后续排查 return (url, f"失败: {str(e)}") finally: if browser: await browser.close() async def batch_process(url_list, csv_path): with open(csv_path, 'w', newline='', encoding='utf-8') as f: writer = csv.writer(f) writer.writerow(["网站链接", "处理状态"]) for url in url_list: result = await capture_single_site(url) writer.writerow(result) # 无论成功失败,直接进入下一个循环
2. 前置可访问性检测
在执行截图前,先对网站做轻量连通性检测(比如发送HEAD请求),提前筛选出无法访问的网站,跳过截图步骤,节省资源。
示例代码:
import requests def is_site_accessible(url): try: # 发送HEAD请求,只获取响应头,不下载页面内容 response = requests.head(url, timeout=10, allow_redirects=True) # 状态码小于400则认为可尝试访问 return response.status_code < 400 except: return False
3. 配置代理(可选)
如果需要访问区域限制的网站,可配置合规代理IP,将受阻请求通过代理转发。注意选择稳定的代理服务,避免触发目标网站的反爬机制。
Pyppeteer中配置代理的示例:
browser = await launch(args=['--proxy-server=http://your-proxy-ip:port'])
4. 严格设置超时阈值
给所有网络请求、页面加载、截图操作设置明确的超时时间,确保单个网站的异常不会阻塞整个批量任务的执行。
内容的提问来源于stack exchange,提问作者Usman Afridi
相关产品推荐
相关产品推荐

