影刀RPA User-Agent与请求头设置模拟不同设备作者林焱什么情况用你用影刀RPA访问某个网站发现电脑版和手机版显示的内容不同需要模拟手机设备才能看到手机版数据有些网站检测到自动化工具就拒绝访问需要修改请求头绕过你想让影刀的HTTP请求看起来像正常浏览器发出的User-Agent和请求头设置是控制你的请求看起来像谁的关键。网站服务器根据User-Agent判断访问者是什么浏览器和设备进而返回不同内容或进行不同限制。掌握请求头设置是高级网页自动化的必备技能。本文讲清楚什么是User-Agent、怎么在影刀中设置、怎么模拟不同设备。怎么做一、User-Agent是什么User-Agent简称UA是HTTP请求头中的一个字段告诉服务器我是谁// Chrome浏览器Windows Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 // Safari浏览器Mac Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Safari/605.1.15 // iPhoneSafari Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1 // Android手机Chrome Mozilla/5.0 (Linux; Android 13; SM-S901B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36二、常用User-Agent列表# 常用UA字典USER_AGENTS{# 桌面浏览器chrome_windows:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36,chrome_mac:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36,firefox_windows:Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0,edge_windows:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0,safari_mac:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Safari/605.1.15,# 移动设备[video(video-hfI7shK0-1783721649620)(type-csdn)(url-https://live.csdn.net/v/embed/526818)(image-https://v-blog.csdnimg.cn/asset/582d14c3bd0451c5399cd990b56e2a0d/cover/Cover0.jpg)(title-拼多多店群自动化报活动上架)]iphone:Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1,ipad:Mozilla/5.0 (iPad; CPU OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1,android_chrome:Mozilla/5.0 (Linux; Android 13; SM-S901B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36,android_firefox:Mozilla/5.0 (Android 13; Mobile; rv:121.0) Gecko/121.0 Firefox/121.0,# 搜索引擎爬虫不要随便用可能被封IPgooglebot:Mozilla/5.0 (compatible; Googlebot/2.1; http://www.google.com/bot.html),}三、在影刀RPA中设置User-Agent方式1浏览器启动参数在影刀的浏览器配置中可以设置启动时使用的User-Agent影刀浏览器设置 → 高级 → 自定义启动参数 添加参数--user-agentMozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X)...方式2JavaScript修改// 在页面加载前通过JavaScript修改UA// 注意这种方法修改的是navigator.userAgent不是HTTP请求头Object.defineProperty(navigator,userAgent,{get:function(){returnMozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1;}});四、用Selenium设置User-Agentfromseleniumimportwebdriverfromselenium.webdriver.chrome.optionsimportOptions# 桌面浏览器设置UA defcreate_browser_with_ua(ua_keychrome_windows):创建指定UA的浏览器optionsOptions()options.add_argument(f--user-agent{USER_AGENTS[ua_key]})driverwebdriver.Chrome(optionsoptions)returndriver# 使用drivercreate_browser_with_ua(iphone)# 模拟iPhone访问driver.get(https://example.com)print(f当前UA{driver.execute_script(return navigator.userAgent)})# 模拟手机设备含屏幕尺寸 defcreate_mobile_browser(deviceiphone):创建模拟手机的浏览器optionsOptions()ifdeviceiphone:options.add_argument(f--user-agent{USER_AGENTS[iphone]})options.add_argument(--window-size375,812)# iPhone X尺寸elifdeviceandroid:options.add_argument(f--user-agent{USER_AGENTS[android_chrome]})options.add_argument(--window-size360,800)# Android尺寸elifdeviceipad:options.add_argument(f--user-agent{USER_AGENTS[ipad]})options.add_argument(--window-size768,1024)# iPad尺寸# 启用触摸模拟options.add_argument(--enable-touch-events)driverwebdriver.Chrome(optionsoptions)returndriver五、HTTP请求头设置importrequests# 基本请求头设置 headers{User-Agent:USER_AGENTS[chrome_windows],Accept:text/html,application/xhtmlxml,application/xml;q0.9,*/*;q0.8,Accept-Language:zh-CN,zh;q0.9,en;q0.8,Accept-Encoding:gzip, deflate, br,Connection:keep-alive,Referer:https://www.google.com/,}responserequests.get(https://example.com,headersheaders)# 完整的请求头模拟 defcreate_realistic_headers(ua_keychrome_windows,refererNone):创建模拟真实浏览器的请求头headers{User-Agent:USER_AGENTS[ua_key],Accept:text/html,application/xhtmlxml,application/xml;q0.9,image/avif,image/webp,*/*;q0.8,Accept-Language:zh-CN,zh;q0.9,en;q0.8,Accept-Encoding:gzip, deflate, br,Connection:keep-alive,Upgrade-Insecure-Requests:1,Sec-Fetch-Dest:document,Sec-Fetch-Mode:navigate,Sec-Fetch-Site:none,Sec-Fetch-User:?1,Cache-Control:max-age0,}ifreferer:headers[Referer]refererreturnheaders# 带Cookie的完整请求 deffetch_with_session(url,ua_keychrome_windows):带Session的请求保持Cookiesessionrequests.Session()session.headers.update(create_realistic_headers(ua_key))# 先访问主页获取Cookiesession.get(https://example.com)# 再访问目标页面带上Cookieresponsesession.get(url)returnresponse六、随机User-Agent轮换importrandom# 桌面UA池DESKTOP_UAS[USER_AGENTS[chrome_windows],USER_AGENTS[chrome_mac],USER_AGENTS[firefox_windows],USER_AGENTS[edge_windows],]# 移动UA池MOBILE_UAS[USER_AGENTS[iphone],USER_AGENTS[android_chrome],]defget_random_ua(device_typedesktop):随机获取UAifdevice_typedesktop:returnrandom.choice(DESKTOP_UAS)elifdevice_typemobile:returnrandom.choice(MOBILE_UAS)else:returnrandom.choice(DESKTOP_UASMOBILE_UAS)# 在采集循环中轮换UAdefscrape_with_rotating_ua(urls):使用随机UA采集results[]fori,urlinenumerate(urls):uaget_random_ua(desktop)headerscreate_realistic_headers()headers[User-Agent]uatry:responserequests.get(url,headersheaders,timeout30)results.append({url:url,status:response.status_code,ua:ua,content:response.text})print(f[{i1}/{len(urls)}] 成功 -{ua[:50]}...)exceptExceptionase:print(f[{i1}/{len(urls)}] 失败 -{e})results.append({url:url,error:str(e)})# 随机延时time.sleep(random.uniform(1,3))returnresults七、其他重要请求头# Referer告诉服务器你从哪个页面跳转来的headers[Referer]https://www.example.com/search?keyword手机# Origin标识请求来源用于CORSheaders[Origin]https://www.example.com# AuthorizationAPI认证headers[Authorization]Bearer your_token_here# Content-TypePOST请求的数据格式headers[Content-Type]application/json# JSON格式headers[Content-Type]application/x-www-form-urlencoded# 表单格式# X-Requested-With标识AJAX请求headers[X-Requested-With]XMLHttpRequest# 自定义头部某些网站用自定义头做反爬headers[X-Custom-Header]some_value有什么坑坑1改了UA但网站还是识别出自动化现象设置了正常浏览器的UA但网站还是检测到是自动化工具。原因网站不只看UA还检测其他特征——navigator.webdriver属性为true、缺少Chrome插件、CDP命令痕迹等。解决除了设置UA还要隐藏webdriver特征// 通过JavaScript隐藏webdriver属性Object.defineProperty(navigator,webdriver,{get:()undefined});在影刀中使用无痕模式或使用undetected-chromedriver库。坑2UA和设备特征不一致现象设置了iPhone的UA但网站返回的还是电脑版页面。原因网站不仅看UA还看屏幕宽度、触摸事件、设备像素比等。UA是iPhone但窗口宽度1920px网站会判断为伪装的移动设备。解决模拟手机时同时设置UA和窗口尺寸如375x812。在Selenium中使用Chrome DevTools的设备模拟模式TEMU店群矩阵自动化运营核价报活动# 设置设备模拟driver.execute_cdp_cmd(Emulation.setDeviceMetricsOverride,{width:375,height:812,mobile:True,![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/cafddc1b9ce3450d9ffb17dd7f0d2e02.png#pic_center)deviceScaleFactor:3,})坑3请求头顺序影响反爬检测现象用requests发请求所有头都设了但还是被识别为非浏览器请求。原因有些高级反爬系统检测请求头的顺序。浏览器的请求头有固定顺序requests库发出的头顺序不同。解决使用urllib3的HTTPHeaderDict或httpx库控制头的顺序。或者直接用Selenium/Playwright发请求完全模拟浏览器行为不使用requests。坑4UA版本太旧被拒绝现象用了两年前的Chrome UA有些网站直接拒绝访问。原因有些网站会检查UA中的浏览器版本版本太旧可能是爬虫或过时的浏览器会被拒绝。解决定期更新UA列表使用较新版本的浏览器UA。或者从真实浏览器中复制最新的UA字符串。不要用过老或过新的版本号不存在的版本。坑5影刀浏览器修改UA后影响元素定位现象在影刀中修改了UA为手机版页面变成了移动版布局之前捕获的桌面版元素选择器全部失效。原因手机版和电脑版的HTML结构通常不同元素选择器不能通用。解决切换设备类型后需要重新捕获元素。为手机版和电脑版分别维护一套元素配置。在流程开始时根据设备类型选择对应的元素配置文件。