专栏首页python3Selenium使用代理IP&无头模式访问网站

Selenium使用代理IP&无头模式访问网站

Selenium使用代理IP&无头模式访问网站

很多防爬机制会自动检测ip访问的频率,超过设定的次数,就会被封,这个时候就需要使用代理ip来解决这个问题了

代码如下:

#!/usr/bin/env python
# coding: utf-8
from selenium import webdriver


class Proxy(object):
    def __init__(self):
        self.proxy_ip = 'http://代理ip地址:端口'
        self.browser = self.getbrowser()
        self.getpage(self.browser)

    def getbrowser(self):
        options = webdriver.ChromeOptions()
        # 设置代理
        desired_capabilities = webdriver.DesiredCapabilities.INTERNETEXPLORER.copy()
        desired_capabilities['proxy'] = {
            "httpProxy": self.proxy_ip,
            # "ftpProxy": self.proxy_ip,  # 代理ip是否支持这个协议
            # "sslProxy": self.proxy_ip,  # 代理ip是否支持这个协议
            "noProxy": None,
            "proxyType": "MANUAL",
            "class": "org.openqa.selenium.Proxy",
            "autodetect": False
        }
        # 使用无头模式
        options.add_argument('headless')
        browser = webdriver.Chrome(chrome_options=options,
                                   executable_path=r'D:\chromedriver_2.41\chromedriver.exe',
                                   desired_capabilities=desired_capabilities)
        return browser

    def getpage(self, browser):
        # 打开目标网站
        browser.get("https://www.baidu.com")
        # 对整个页面进行截图
        browser.save_screenshot('百度.png')
        # 打印网站的title信息
        print(browser.title)

        # 检测代理ip是否生效
        browser.get("http://httpbin.org/ip")
        # 获取当前所有窗口集合(list类型) --- 因为打开多个窗口
        handles = browser.window_handles
        # 切换到最新的窗口
        browser.switch_to_window(handles[-1])
        # 打印新窗口网页的内容
        print(browser.page_source)


if __name__ == '__main__':
    Proxy()

运行程序,显示打印的是代理ip地址,则表示使用代理成功

还会自动截图

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 云上如何玩转IPV6排障工具?

    导语:2019年11月26日,是人类互联网时代重要的一天,来自欧洲RIPENCC(欧洲IP资源网络协调中心)的邮件确认全球近43亿个IPv4地址已经耗尽,人类向...

    持之以恒
  • Spring 获取真实Ip

    但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了,如果通过了多级反向代理的话,X-Forwarded-For的值并不止一个,...

    DH镔
  • tcp详解 netstat理解

    为了深入理解TCP协议, 我们需要了解TCP客户端/服务端的状态转移和正确性保持. 建议阅读Unix网络编程卷1第二章和第三章, 原书笔记

    平凡的学生族
  • nginx之配置proxy_set_header问题梳理

    将左侧匹配到的/proxy_path/开头的url全部转发到后端服务器 192.168.223.137。

    小勇DW3
  • kube-proxy iptables 模式源码分析

    在前面的文章中已经介绍过 iptable 的一些基本信息,本文会深入介绍 kube-proxy iptables 模式下的工作原理,本文中多处会与 iptab...

    田飞雨
  • APP安全测试 从服务器端到网站端做全面的安全检测

    很多公司都有着自己的APP,包括安卓端以及ios端都有属于自己的APP应用,随着互联网的快速发展,APP安全也影响着整个公司的业务发展,前段时间有客户的APP被...

    网站安全专家
  • Flask-Script扩展命令行

    在Django中启动服务的时候,可以使用python manage.py runserver 或者 python manage.py shell,那么Flask...

    Devops海洋的渔夫
  • 简单了解一下K8S,并搭建自己的集群

    距离上次更新已经有一个月了,主要是最近工作上的变动有点频繁,现在才暂时稳定下来。这篇博客的本意是带大家从零开始搭建K8S集群的。但是我后面一想,如果是我看了这篇...

    SH的全栈笔记
  • 在Visual Studio2013中编译使用libcurl库

    libcurl是一个跨平台的网络协议库,支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议。lib...

    ccf19881030
  • 快速学习Oracle-VMware的网络配置

    cwl_java

扫码关注云+社区

领取腾讯云代金券