Selenium偶遇反爬虫

本文探讨了使用Selenium进行网页爬取时遇到的403禁止访问问题,分析了可能的原因,包括Cookie问题和使用代理。通过实验验证,确认Cookie是导致问题的关键,并提供了通过设置WebDriver选项来绕过反爬虫技术的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开发在爬虫获取数据使用Selenium访问网站的时候遇到如下问题:

使用get方法打开第一个url,请求可以正常发送并得到正确的响应内容;然后再通过点击操作页面上的a标签跳转url,或者再次使用get方法打开url,会得到无权限访问的403响应,就是标题中的“Access Denied You don't have permission to access “url” Reference ......”。

度娘、Google搜索几乎没有涉及到关于Selenium报这个错的信息,但也得到了一些可能引起的原因:

(1)访问的网站发现网络或浏览器cookie等存在问题时,它就会阻止访问;

(2)使用VPN、代理导致的阻止访问。

问题分析解决:

1.使用VPN、代理导致的阻止访问

针对这种说法可以先排除了,不管是Chrome还是Firefox浏览器,WebDriver启动时默认都是全新的默认配置(Chrome会使用新用户默认配置,Firefox会使用新的profile默认配置),浏览器默认都是没有配置VPN、代理的,所以先排除这个原因。

2.Cookie问题引起

经过排查,使用Selenium打开浏览器访问并没有新增任何Cookie;只是Selenium创建唯一session与浏览器实现一对一,Selenium启动的socket服务这时候是与浏览器处于同进程的(在资源管理器中把chromedriver.exe进程关掉,会同时关闭进程与浏览器),但不知道是不是因为这个导致的?所以有了下面的代码验证:

WebDriver driver = new ChromeDriver();
driver.get("https://www.footpatrol.com/footwear/brand/nike/");
driver.manage().deleteAllCookies();
driver.findElement(By.xpath("//ul[@id='productListMain']/li[1]/span/a")).click();
driver.quit();

打开页面后,使用deleteAllCookies方法把Cookie全删了,再去点击或访问,这时候页面是能正常访问的,所以可以证明确实是Cookie出现了问题。

然后又引入了2个问题:

(1)不能每次操作前都去删除Cookie

(2)明明看到Selenium WebDriver并没有在发送请求添加任何Cookie,为什么删除了Cookie就可以了呢?

继续度娘、Google搜索

http://www.cnseu.net/?p=85中找到答案,网站为了防止使用WebDriver的爬虫,所以做了反爬虫技术

ChromeOptions option = new ChromeOptions();
option.setExperimentalOption("excludeSwitches", new String[]{"enable-automation"});
WebDriver driver = new ChromeDriver(option);
driver.get("https://www.footpatrol.com/footwear/brand/nike/");
driver.findElement(By.xpath("//ul[@id='productListMain']/li[1]/span/a")).click();
driver.quit();

setExperimentalOption方法的value值必须是一个可以转换成JSON的Object,可以是list、数组、JSONObject。

使用Selenium爬虫,可以关注的文章:https://www.cnblogs.com/Snail-offort/p/8761652.html

结语

一些网站针对WebDriver做了反爬虫技术,证明WebDriver在爬虫界也有了一定地位了,哈哈,这是值得高兴的。与开发的第一次爬虫碰撞,偶遇了反爬虫技术也让我对WebDriver有了更深的体验。另外在这个过程中,还尝试过使用Google的无窗口模式(浏览器版本必须大于59)

ChromeOptions option = new ChromeOptions();
option.addArguments("--headless");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值