Selenium调用get方法访问指定URL时跳转至网站主页如何解决
问题原因
- 反爬虫机制识别:BestBuy部署了成熟的反爬虫系统,能够识别Selenium启动的浏览器自带的自动化特征(比如
navigator.webdriver属性为true、缺少正常浏览器的指纹参数、启动标记异常等),检测到非人为访问后会直接重定向到站点首页。 - 地区访问限制:该促销页面仅对部分地区(主要是美国地区)的IP开放,非合规地区IP访问时会被强制跳转至首页。
- 站点初始化校验缺失:首次访问BestBuy站点需要完成地区选择、Cookie同意等前置校验,未完成校验的情况下访问内页会被重定向。
可行解决方案
- 改用undetected-chromedriver替代原生Selenium驱动
该库专门针对主流站点的反自动化检测做了特征隐藏,能绕过大部分基础反爬校验,示例代码如下:
import undetected_chromedriver as uc driver = uc.Chrome(executable_path=r"C:\Users\chromedriver.exe") driver.get("https://www.bestbuy.com/site/promo/health-fitness-deals") # 原有抓取逻辑保持不变 tag = driver.find_elements_by_tag_name('h4') for a in tag: for link in a.find_elements_by_tag_name('a'): print(link.get_attribute("href"))
- 给原生Chrome添加启动参数隐藏自动化特征
如果不想换第三方库,可以给Chrome添加启动参数抹除自动化标记,同时伪装正常浏览器的请求头:
from selenium import webdriver from selenium.webdriver.chrome.options import Options chrome_options = Options() # 隐藏自动化标记 chrome_options.add_argument("--disable-blink-features=AutomationControlled") chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"]) chrome_options.add_experimental_option("useAutomationExtension", False) # 伪装正常浏览器UA chrome_options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36") driver = webdriver.Chrome(executable_path=r"C:\Users\chromedriver.exe", options=chrome_options) # 执行CDP命令覆盖webdriver属性 driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", { "source": "Object.defineProperty(navigator, 'webdriver', {get: () => undefined})" }) driver.get("https://www.bestbuy.com/site/promo/health-fitness-deals")
- 配置合规代理IP
如果是地区限制导致的跳转,需要使用美国地区的住宅代理IP,在启动参数中配置代理即可:
chrome_options.add_argument("--proxy-server=http://你的代理IP:端口")
- 完成前置校验后再抓取
首次访问跳转后可以先模拟点击地区选择、同意Cookie的按钮,完成站点的初始化校验后再重新访问目标促销页,也可以提前导出手动访问正常的浏览器Cookie,在Selenium启动后导入Cookie再访问页面。
内容的提问来源于stack exchange,提问作者grasper
相关产品推荐
相关产品推荐

