资讯专栏INFORMATION COLUMN

selenium实现ip代理http认证

Me_Kun / 1827人阅读

摘要:实现代理认证原理本身支持的不支持用户认证,想要认证用户代理,本文的思想就是给浏览器装插件,也就是代理插件。

selenium实现ip代理http认证

原理
selenium本身支持的ip不支持用户认证,想要认证用户代理ip, 本文的思想就是给浏览器装插件,也就是代理插件。
其中插件的包来源于https://github.com/RobinDev/S...
注意:文件路径自己修改

代码如下:

import os
import re
import time
import zipfile
from selenium import webdriver

# Chrome代理模板插件(https://github.com/RobinDev/Selenium-Chrome-HTTP-Private-Proxy)目录
CHROME_PROXY_HELPER_DIR = "../cookies/Chrome-proxy-helper"
# 存储自定义Chrome代理扩展文件的目录
CUSTOM_CHROME_PROXY_EXTENSIONS_DIR = "../cookies/chrome-proxy-extensions"


def get_chrome_proxy_extension(proxy):
    """获取一个Chrome代理扩展,里面配置有指定的代理(带用户名密码认证)
    proxy - 指定的代理,格式: username:password@ip:port
    """
    m = re.compile("([^:]+):([^@]+)@([d.]+):(d+)").search(proxy)
    if m:
        # 提取代理的各项参数
        username = m.groups()[0]
        password = m.groups()[1]
        ip = m.groups()[2]
        port = m.groups()[3]
        # 创建一个定制Chrome代理扩展(zip文件)
        if not os.path.exists(CUSTOM_CHROME_PROXY_EXTENSIONS_DIR):
            os.mkdir(CUSTOM_CHROME_PROXY_EXTENSIONS_DIR)
        extension_file_path = os.path.join(CUSTOM_CHROME_PROXY_EXTENSIONS_DIR, "{}.zip".format(proxy.replace(":", "_")))
        if not os.path.exists(extension_file_path):
            # 扩展文件不存在,创建
            zf = zipfile.ZipFile(extension_file_path, mode="w")
            zf.write(os.path.join(CHROME_PROXY_HELPER_DIR, "manifest.json"), "manifest.json")
            # 替换模板中的代理参数
            background_content = open(os.path.join(CHROME_PROXY_HELPER_DIR, "background.js")).read()
            background_content = background_content.replace("%proxy_host", ip)
            background_content = background_content.replace("%proxy_port", port)
            background_content = background_content.replace("%username", username)
            background_content = background_content.replace("%password", password)
            zf.writestr("background.js", background_content)
            zf.close()
        return extension_file_path
    else:
        raise Exception("Invalid proxy format. Should be username:password@ip:port")


if __name__ == "__main__":
    # 测试
    options = webdriver.ChromeOptions()
    # 添加一个自定义的代理插件(配置特定的代理,含用户名密码认证)
    options.add_extension(get_chrome_proxy_extension(proxy="cj422w:cj422w@117.41.187.145:888"))
    print(options)
    driver = webdriver.Chrome(chrome_options=options)
    # 访问一个IP回显网站,查看代理配置是否生效了
    driver.get("http://httpbin.org/ip")
    print(driver.page_source)
    time.sleep(60)
    driver.quit()

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/43886.html

相关文章

  • 爬虫攻防实践

    摘要:之前在学校曾经用过的方法做过一些爬虫脚本来玩,从正式转前端之后,出于兴趣,我对爬虫和反爬虫又做了一些了解,并且做了一些爬虫攻防的实践。爬虫脚本通常会很频繁的进行网络请求,比如要爬取豆瓣排行榜的电影,就会连续发送个网络请求。 之前在学校曾经用过request+xpath的方法做过一些爬虫脚本来玩,从ios正式转前端之后,出于兴趣,我对爬虫和反爬虫又做了一些了解,并且做了一些爬虫攻防的实践...

    wanglu1209 评论0 收藏0
  • 爬虫攻防实践

    摘要:之前在学校曾经用过的方法做过一些爬虫脚本来玩,从正式转前端之后,出于兴趣,我对爬虫和反爬虫又做了一些了解,并且做了一些爬虫攻防的实践。爬虫脚本通常会很频繁的进行网络请求,比如要爬取豆瓣排行榜的电影,就会连续发送个网络请求。 之前在学校曾经用过request+xpath的方法做过一些爬虫脚本来玩,从ios正式转前端之后,出于兴趣,我对爬虫和反爬虫又做了一些了解,并且做了一些爬虫攻防的实践...

    xiangzhihong 评论0 收藏0
  • Python入门网络爬虫之精华版

    摘要:学习网络爬虫主要分个大的版块抓取,分析,存储另外,比较常用的爬虫框架,这里最后也详细介绍一下。网络爬虫要做的,简单来说,就是实现浏览器的功能。 Python学习网络爬虫主要分3个大的版块:抓取,分析,存储 另外,比较常用的爬虫框架Scrapy,这里最后也详细介绍一下。 首先列举一下本人总结的相关文章,这些覆盖了入门网络爬虫需要的基本概念和技巧:宁哥的小站-网络爬虫,当我们在浏览器中输入...

    Bmob 评论0 收藏0
  • Python_爬虫基础

    摘要:并不是所有爬虫都遵守,一般只有大型搜索引擎爬虫才会遵守。的端口号为的端口号为工作原理网络爬虫抓取过程可以理解为模拟浏览器操作的过程。表示服务器成功接收请求并已完成整个处理过程。 爬虫概念 数据获取的方式: 企业生产的用户数据:大型互联网公司有海量用户,所以他们积累数据有天然优势。有数据意识的中小型企业,也开始积累的数据。 数据管理咨询公司 政府/机构提供的公开数据 第三方数据平台购买...

    ixlei 评论0 收藏0
  • Python 从零开始爬虫(一)——爬虫伪装&反“反爬”

    摘要:总的来说有两种反爬策略,要么验证身份,把虫子踩死在门口要么在网站植入各种反爬机制,让爬虫知难而退。本节内容就着这两种反爬策略提出一些对策。内嵌反爬很灵活,没有什么固定的代码格式,要花时间去分析出来。   之前提到过,有些网站是防爬虫的。其实事实是,凡是有一定规模的网站,大公司的网站,或是盈利性质比较强的网站,都是有高级的防爬措施的。总的来说有两种反爬策略,要么验证身份,把虫子踩死在门口...

    int64 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<