如何避免Selenium爬虫被网站识破

本文详细探讨了Selenium爬虫如何被网站识别的问题,涉及的因素包括请求头信息、IP限制、Cookie验证和页面加载速度。给出了使用不同的User-Agent、设置间隔时间、以及使用代理IP来规避反爬虫策略的解决方案。

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

简介: 如何避免Selenium爬虫被网站识破

在对一些需要进行登陆操作的网站爬取时,通常都会使用到Selenium。但是Selenium爬虫在爬取数据时也是会被网站检测到,这是因为Selenium模拟了浏览器行为,而相对于真实用户的浏览器,Selenium模拟无法识别JavaScript代码和CSS文件。此外,网站也可能通过检测请求头、IP地址、Cookie等信息来判断是否是爬虫。

接下来我们就详细的来了解下这些原因是怎么产生的。

1、请求头信息:

一般情况下Selenium提供的请求头信息与正常的浏览器请求头略有不同,所以需要自定义User-Agent字段让请求头更像正常的浏览器。

2、IP封禁或限制访问:

如果频繁使用同一个IP地址进行数据爬取,服务器可能会将该IP地址视为恶意IP并加入黑名单。

3、Cookie验证:

部分网站可能会在登录后,在后续的每个请求中都要求携带相关的Cookie信息。

4、页面加载速度:

如果程序访问频率过高,页面加载时间却显示异常迅速,网站越是往后就越容易加强反爬虫措施了。

以下就是针对上述问题而提供的解决方式:

1、更换User-Agent:

可以在每个请求中使用不同的User-Agent字段,避免与其他请求相同IP和头部参数给网站接口留下“爬虫”的印象。

2、设置合理的间隔时间:

通过设置适当间隔(如访问网站后1-5秒内不再访问),以模拟真实用户的行为,减少被检测到的概率。

3、使用代理IP:

代理IP可以隐藏你的真实IP地址,但是如果时间较长或请求次数太频繁,代理IP也有被风控的危险,所以尽量使用更多,质量更好的IP池。

以下是一段使用代理IP的Selenium爬虫示例代码,可以在每次请求时更换一个随机代理IP,这种就是隧道转发模式的代理,需要注意的是,要使用合法、高质量的代理IP服务提供商比如亿牛云代理,以避免安全和质量问题。
`

``from selenium import webdriver  
import string  
import zipfile


# 代理服务器(产品官网 www.16yun.cn)
proxyHost = "t.16yun.cn"
proxyPort = "3111"

# 代理验证信息
proxyUser = "username"
proxyPass = "password"


def create_proxy_auth_extension(proxy_host, proxy_port,
                                proxy_username, proxy_password,
                                scheme='http', plugin_path=None):
    if plugin_path is None:
        plugin_path = r'/tmp/{}_{}@t.16yun.zip'.format(proxy_username, proxy_password)


    manifest_json = """
    {
        "version": "1.0.0",
        "manifest_version": 2,
        "name": "16YUN Proxy",
        "permissions": [
            "proxy",
            "tabs",
            "unlimitedStorage",
            "storage",
            "<all_urls>",
            "webRequest",
            "webRequestBlocking"
        ],
        "background": {
            "scripts": ["background.js"]
        },
        "minimum_chrome_version":"22.0.0"
    }
    """

    background_js = string.Template(
        """
        var config = {
            mode: "fixed_servers",
            rules: {
                singleProxy: {
                    scheme: "${scheme}",
                    host: "${host}",
                    port: parseInt(${port})
                },
                bypassList: ["localhost"]
            }
          };

        chrome.proxy.settings.set({value: config, scope: "regular"}, function() {});

        function callbackFn(details) {
            return {
                authCredentials: {
                    username: "${username}",
                    password: "${password}"
                }
            };
        }

        chrome.webRequest.onAuthRequired.addListener(
            callbackFn,
            {urls: ["<all_urls>"]},
            ['blocking']
        );
        """
    ).substitute(
        host=proxy_host,
        port=proxy_port,
        username=proxy_username,
        password=proxy_password,
        scheme=scheme,
    )
    print(background_js)

    with zipfile.ZipFile(plugin_path, 'w') as zp:
        zp.writestr("manifest.json", manifest_json)
        zp.writestr("background.js", background_js)

    return plugin_path


proxy_auth_plugin_path = create_proxy_auth_extension(
    proxy_host=proxyHost,
    proxy_port=proxyPort,
    proxy_username=proxyUser,
    proxy_password=proxyPass)

option = webdriver.ChromeOptions()


option.add_argument("--start-maximized")

# 如报错 chrome-extensions
# option.add_argument("--disable-extensions")

option.add_extension(proxy_auth_plugin_path)

# 关闭webdriver的一些标志
# option.add_experimental_option('excludeSwitches', ['enable-automation'])

driver = webdriver.Chrome(
    chrome_options=option,
    executable_path="./chromdriver"
)

# 修改webdriver get属性
# script = '''
# Object.defineProperty(navigator, 'webdriver', {
# get: () => undefined
# })
# '''
# driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {"source": script})
driver.get("https://httpbin.org/ip")

关于Python的技术储备

在这里给大家分享一些免费的课程供大家学习,下面是课程里面的截图,扫描最下方的二维码就能全部领取,如果图片失效点击蓝色字体便可跳转哦~点这里哦

1.Python所有方向的学习路线

在这里插入图片描述

2.学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。
在这里插入图片描述

3.学习资料

在这里插入图片描述

4.实战资料

实践是检验真理的唯一标准。这里的压缩包可以让你再闲暇之余帮你提升你的个人能力。
在这里插入图片描述

5.视频课程

在这里插入图片描述

好啦今天的分享就到这里结束了,快乐的时光总是短暂呢,想学习更多课程的小伙伴不要着急,有更多惊喜哦~在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值