如何在Perl的Selenium::Remote::Driver中设置自定义User-Agent
解决Selenium::Remote::Driver设置桌面Firefox User-Agent及反爬问题
一、正确手动设置桌面Firefox User-Agent
你之前尝试用LWP::UserAgent传递UA的方式是错误的——Selenium::Remote::Driver的ua参数是用于Selenium自身API请求的UA,而非浏览器的UA。正确的方式是通过Firefox配置文件(Profile)修改浏览器的UA:
use Selenium::Remote::Driver; use Selenium::Firefox::Profile; # 创建Firefox配置实例 my $profile = Selenium::Firefox::Profile->new; # 设置与VNC中一致的桌面Firefox UA $profile->set_preference('general.useragent.override', 'Mozilla/5.0 (X11; Linux x86_64; rv:105.0) Gecko/20100101 Firefox/105.0'); # 初始化Driver并传入配置文件 my $driver = Selenium::Remote::Driver->new( browser_name => 'firefox', firefox_profile => $profile );
这种方式直接修改浏览器的UA参数,和你手动在Firefox设置里修改UA的效果完全一致,能避免Selenium默认UA的特征。
二、扩展Selenium::UserAgent添加桌面设备
如果想复用Selenium::UserAgent的逻辑,可以直接扩展它的设备哈希表:
use Selenium::UserAgent; # 定义桌面Firefox的设备配置 my $desktop_firefox = { browserName => 'firefox', platform => 'LINUX', version => '105', userAgent => 'Mozilla/5.0 (X11; Linux x86_64; rv:105.0) Gecko/20100101 Firefox/105.0', screenResolution => '1920x1080' # 匹配VNC中的窗口分辨率 }; # 实例化UserAgent并添加自定义设备 my $ua = Selenium::UserAgent->new; $ua->devices->{desktop_firefox} = $desktop_firefox; # 使用自定义设备创建Driver my $driver = $ua->driver(device => 'desktop_firefox');
Selenium::UserAgent的devices属性是可修改的哈希,添加自定义设备后就能用它的driver方法直接生成符合要求的浏览器实例。
三、反爬额外规避配置
既然VNC打开Firefox无反爬,Selenium触发,说明除了UA,反爬还可能检测自动化特征,需补充以下配置:
# 在之前的Profile配置中添加: # 隐藏Selenium自动化标识 $profile->set_preference('dom.webdriver.enabled', 0); $profile->set_preference('useAutomationExtension', 0); # 匹配VNC中的窗口大小 $profile->set_preference('browser.startup.windowWidth', 1920); $profile->set_preference('browser.startup.windowHeight', 1080); # 如果使用无头模式,需在extra_capabilities中补充参数: extra_capabilities => { 'moz:firefoxOptions' => { args => ['--window-size=1920,1080'] } }
这些配置能让Selenium模拟的Firefox更接近手动操作的环境,进一步绕过反爬检测。
内容的提问来源于stack exchange,提问作者tester3
相关产品推荐
相关产品推荐

