Laravel爬虫无法抓取需启用JavaScript的网站问题求助
解决Laravel爬虫中启用JavaScript仍被拦截的问题
问题场景
尝试抓取链接 https://datacvr.virk.dk/soegeresultater?sideIndex=0&enhedstype=virksomhed&antalAnsatte=ANTAL_20_49&virksomhedsstatus=aktiv%252Cnormal&size=10 时:
- 使用Symfony HttpBrowser在维基百科等站点正常运行,但目标站返回「需启用JavaScript才能继续」错误;
- 更换Symfony Panther的Chrome Client后,仍提示「启用JavaScript和Cookie以继续」。
解决方案
1. 调整Panther Chrome Client的自动化检测规避配置
Panther默认启用JavaScript,但很多网站会识别「自动化浏览器」特征,需添加参数规避:
use Symfony\Component\Panther\Client; $client = Client::createChromeClient(null, [ '--enable-javascript', '--accept-cookies', '--disable-blink-features=AutomationControlled', // 核心:移除Chrome自动化标记 '--no-sandbox', // 部分服务器环境需要的参数 ]);
--disable-blink-features=AutomationControlled 会让浏览器隐藏「被自动化控制」的标识,避免被目标站的反爬机制拦截。
2. 添加真实浏览器请求头
即使是无头浏览器,也需要模拟普通用户的请求头,减少被识别的概率:
$client->request('GET', '你的目标URL', [], [], [ 'HTTP_USER_AGENT' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36', 'HTTP_ACCEPT' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8', 'HTTP_ACCEPT_LANGUAGE' => 'da-DK,da;q=0.9,en-US;q=0.8,en;q=0.7', // 匹配目标站语言(丹麦语) 'HTTP_ACCEPT_ENCODING' => 'gzip, deflate, br', 'HTTP_CONNECTION' => 'keep-alive', 'HTTP_UPGRADE_INSECURE_REQUESTS' => '1', ]);
设置与目标站匹配的语言头,能更贴近真实用户的请求特征。
3. 先获取初始会话Cookie
部分网站需要先访问首页建立会话,再请求目标页面:
// 先访问网站首页,获取初始会话Cookie $client->request('GET', 'https://datacvr.virk.dk/'); // 等待首页JS加载完成(可选,根据页面实际元素调整) $client->waitFor('#main-content'); // 再请求目标搜索结果页 $client->request('GET', '你的目标搜索URL');
初始会话Cookie是很多网站验证用户合法性的基础,缺少会直接触发拦截。
4. 更换为Playwright工具
如果Panther仍无法绕过拦截,推荐使用PHP版Playwright,它对浏览器的模拟更贴近真实用户:
首先安装依赖:
composer require symfony/playwright
示例代码:
use Symfony\Component\Playwright\Playwright; $playwright = Playwright::create(); $browser = $playwright->chromium->launch([ 'headless' => true, 'args' => ['--disable-blink-features=AutomationControlled'], ]); $page = $browser->newPage([ 'userAgent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36', ]); // 访问首页建立会话 $page->goto('https://datacvr.virk.dk/'); $page->waitForLoadState('networkidle'); // 跳转至目标搜索页 $page->goto('你的目标URL'); // 等待搜索结果加载完成 $page->waitForSelector('.search-result-item'); // 获取页面内容 $content = $page->content(); $browser->close();
Playwright内置更完善的反检测机制,能有效绕过多数网站的反爬拦截。
5. 合规提示
目标网站为丹麦商业登记平台,需确保爬虫行为符合网站的robots.txt规则及当地数据使用法律,避免违规操作。
内容的提问来源于stack exchange,提问作者Alexander Rubino
相关产品推荐
相关产品推荐

