Selenium Python访问新加坡商业时报网站报错求助
解决Selenium访问Business Times网站的报错问题
解决方案
1. 隐藏Selenium核心特征
很多网站会通过window.navigator.webdriver等属性识别自动化工具,可通过ChromeOptions添加参数屏蔽这些特征:
from selenium import webdriver from selenium.webdriver.chrome.options import Options options = Options() # 禁用自动化控制特征 options.add_argument("--disable-blink-features=AutomationControlled") # 模拟普通浏览器用户代理 options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36") # 可选:启用无头模式进一步降低被检测概率 options.add_argument("--headless=new") driver = webdriver.Chrome(options=options) driver.get("https://www.businesstimes.com.sg")
2. 通过CDP强制修改浏览器属性
如果上述方法无效,可利用Chrome DevTools协议(CDP)在页面加载前修改navigator.webdriver属性:
from selenium import webdriver driver = webdriver.Chrome() # 页面加载前注入脚本修改属性 driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", { "source": """ Object.defineProperty(navigator, 'webdriver', { get: () => undefined }) """ }) driver.get("https://www.businesstimes.com.sg")
3. 控制请求频率避免触发反爬
短时间内频繁请求可能触发网站反爬机制,可添加随机延迟降低风险:
import time import random from selenium import webdriver driver = webdriver.Chrome() # 先注入隐藏特征的脚本 driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", { "source": """ Object.defineProperty(navigator, 'webdriver', { get: () => undefined }) """ }) # 随机延迟1-3秒再访问 time.sleep(random.uniform(1, 3)) driver.get("https://www.businesstimes.com.sg")
4. 配置代理IP(可选)
若你的IP被网站封禁,可通过代理更换访问IP:
from selenium import webdriver from selenium.webdriver.chrome.options import Options options = Options() # 替换为你的代理地址 options.add_argument("--proxy-server=http://your-proxy-ip:port") # 同时启用隐藏特征的参数 options.add_argument("--disable-blink-features=AutomationControlled") driver = webdriver.Chrome(options=options) driver.get("https://www.businesstimes.com.sg")
额外注意
- 确保Chrome浏览器与ChromeDriver版本完全匹配,版本不兼容也可能导致访问异常。
- 遵守网站
robots.txt规则,避免过度爬取给服务器造成负担。
内容的提问来源于stack exchange,提问作者Azeem112
相关产品推荐
相关产品推荐

