爬虫中无头浏览器如何选择

小白学大数据
• 阅读 464

我们日常使用浏览器的步骤为:启动浏览器、打开一个网页、进行交互。而无头浏览器指的是我们使用脚本来执行以上过程的浏览器,能模拟真实的浏览器使用场景。主要是用作爬虫,用以捕捉Web上的各类数据;这里的无头主要是指没有界面,完全是后台操作。它就是一个真实的浏览器。只是这个浏览器是无界面的。 在爬虫中使用无头浏览器有很多的注意事项,比如我们的业务场景是否适合使用无头浏览器、我们可以通过这些方面进行判别,如果目标网站反爬不是很难,可以直接通过简单的http请求进行采集,不适合使用无头浏览器方案。反之如果网站有多种验证机制,例如需要验证登录、js反爬策略,如果研发不能进行网站行为分析的情况下,建议使用无头浏览器伪装正常用户,并且需要搭配代理一起使用,代理建议使用像亿牛云提供的爬虫代理去访问网站效果会更好,这里简单的示例下使用代理的方式:

``` 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")

这里需要注意的是,我们在使用浏览器时要注意版本是否一致,可以查看具体的帮助说明,如果不一致,即使程序能够运行,也会出现爬虫代理认证信息失败,需要弹窗要求手动输入认证信息的问题。

点赞
收藏
评论区
推荐文章
Irene181 Irene181
3年前
别去送死了。Selenium 与 Puppeteer 能被网站探测的几十个特征
摄影:产品经理味道很好的毛血旺很多人喜欢使用Selenium或者Puppeteer(Pyppeteer)通过模拟浏览器来编写爬虫,自以为这样可以不被网站检测到,想爬什么数据就爬什么数据。但实际上,Selenium启动的浏览器,有几十个特征可以被网站通过JavaScript探测到。Puppeteer启动的浏览器,也有很多特征能够被网站探测。
鱼蛮子9527 鱼蛮子9527
2年前
一个HTTP请求的前世今生
网络请求现在充斥这我们生活中的各个地方,不论是在浏览器里面搜索你想要的信息,还是用手机跟朋友的聊微信,亦或者使用智能电视观看电视节目,网络请求无时无刻不在为你服务,那么你知道一个网络请求的完整链路吗?当从你在浏览器里面输入一个地址,它会经过那些环节才会到你看到的样子?比如,我们在浏览器里面输:浏览器会显示如下信息"count":"1","infoc
陈发良 陈发良
3年前
工作问题记录总结2021--1
1问题:在ios设备,怎么判断玩家是从通过浏览器进入,还是通过主屏幕点击进来的?解决方法:(不刷新页面,但是改变页面的url地址)1用户在第一次使用浏览器进入的时候,给url地址添加标记,2当用户添加到主屏幕的时候,就多了标记3网页打开的时候,判断是否有这个标记,如果有这个标记,就是通过主屏幕进入,如果没有这个标记,就是通过浏览器进入主
Stella981 Stella981
3年前
Node.js 简单学习
明白JavaScript语言,你就会用Node.js了。最常见的运行JavaScript语言的地方就是用户的浏览器,几乎所有的浏览器上都有个JavaScript引擎,这个引擎负责运行在页面中嵌入的JavaScript代码。代码是在用户的浏览器上运行的,用户那头叫前端(Frontend),服务器这头叫后端(Backend)。Node.js
Stella981 Stella981
3年前
JSP中的Cookie和Session
1\.cookie1.1什么是cookie      浏览器访问服务器时,服务器会将一些数据(少量的,4KB左右)以setcookie消息头的方式发送给浏览器。浏览器会将这些数据保存下来(内存、或者以文件的形式保存在硬盘上)。当浏览器再次访问服务器时,会将这些数据以cookie消息头的方式发送过来。
Stella981 Stella981
3年前
Selenium3自动化测试【13】FireFox与Chrome浏览器元素定位
目前大部分浏览器都内置了相关插件或组件,能够帮助我们快速、简洁地展示各类元素的属性定义、DOM结构、CSS样式等属性。本书中使用的浏览器主要是FireFox、Chrome(这2款浏览器也是作为开发者常用的浏览器),因此本节介于这2款浏览器一起看看这些工具(组件)的使用方法。火狐(FireFox)浏览器如果大家对火狐浏览器较为熟知,在旧版本上的
Stella981 Stella981
3年前
Selenium使用代理出现弹窗验证如何处理
部分商业网站对爬虫程序限制较多,在数据采集的过程中对爬虫请求进行了多种验证,导致爬虫程序需要深入分析目标网站的反爬策略,定期更新和维护爬虫程序,增加了研发的时间和投入成本。这种情况下,使用无头浏览器例如Selenium,模拟用户的请求进行数据采集是更加方便快捷的方式。同时为了避免目标网站出现IP限制,配合爬虫代理,实现每次请求自动切换IP,能够保证长期稳定
Stella981 Stella981
3年前
EasyGBS视频平台设备正常情况下为什么无法播放ws
近几年,国家公安机关一直在强推国标GB28181协议,也有很多厂家积极响应号召,因此很多项目团队也想依托于国标GB28181协议来进行视频平台的搭建。EasyGBS是能够接入国标GB28181协议摄像头的视频平台,能够实现web浏览器、手机浏览器、微信、PC客户端等各种终端无插件播放。!GBS产品架构3平面定.png(http://121.40.
如何在Puppeteer中设置User-Agent来绕过京东的反爬虫机制?
概述京东作为中国最大的电商平台,为了保护其网站数据的安全性,采取了一系列的反爬虫机制。然而,作为开发者,我们可能需要使用爬虫工具来获取京东的数据。正文Puppeteer是一个由Google开发的Node.js库,它提供了高级的API,用于控制无头浏览器(H
小白学大数据 小白学大数据
9个月前
PuppeteerSharp库在C#中的应用案例
引言PuppeteerSharp是一个针对GoogleChrome浏览器的高级API库,它允许我们使用C来控制Chrome浏览器的,比如模拟用户行为操作、爬取网页内容等。本文将介绍如何使用PuppeteerSharp库在C中实现下载千图网图片并保存为PDF
小白学大数据
小白学大数据
Lv1
男 · 亿牛云 · python技术
宁为代码类弯腰,不为bug点提交!
文章
85
粉丝
5
获赞
18