SeleniumWebdriver3.X源码分析之Proxy.py代理能力

点击上方“蓝字”带你去看小星星^_^

> Selenium Webdriver 3.X源码分析系列第9篇,该系列原则上会将整个源码分享一遍

在使用selenium webdriver测试或进行爬虫动作时,如果未在目标服务的白名单内,随着爬取的频率增多会被禁止访问目标服务。

又或者目标服务的反爬虫策略相对完善的情况下,也是很容易将selenium的爬取给禁止。

又或者采用分布式selenium爬取方式时,也会很容易的被禁止爬取。

所以这个时候我们就需要代理服务,来规避一些反爬虫策略等,下面我们看下在selenium webdriver Python端由哪个模块提供了对应的代理功能:

通过查看源码的成员结构,如下图所示:

在proxy.py中提供了http代理、ftp代理、sock代理、ssl代理等能力,基本满足了我们日常的需要。

下面我们看一个基本的Python实例代码,看下如何在代码中使用代理。

# 获取到浏览器对应的配置对象

# 如果为chrome浏览器则为 profile=webdriver.ChromeOptions() 

# 其他浏览器类似

profile=webdriver.FirefoxOptions()

# 设置为headless模式

profile.add_argument(-headless) #设置无头模式

#设置代理服务器类型,类型参见下文的注部分说明

profile.set_preference(network.proxy.type, 1)

# IP为你的代理服务器地址:如‘127.0.0.0’,字符串类型

profile.set_preference(network.proxy.http,IP)

#PORT为代理服务器端口号:如,9999,整数类型

profile.set_preference(network.proxy.http_port, PORT)  

# 加载配置

browser=webdriver.Firefox(options=profile)

注,代理服务器类型,参加proxy.py源码中的定义,如下

即:

0 - 直连,不需要代理

1 - 手动设置代理

2 - 从url自动配置代理

3 - 不用

4 - 自动化侦测代理配置信息

5 - 使用系统代理

6 - 内部使用,不需要调用

所以一般不直接使用proxy.py模块定义的能力,而是通过设置对应的浏览器Options来达成使用代理的功能。

在proxy.py中定义了三个类,如下图所示:

Proxy:具体实现了各种代理

ProxyType:定义了代理类型

ProxyTypeFactory: 定义了代理类型模式

各类的具体代码这里不一一说明了,应该讲源码是很简洁的了,建议深入掌握的人员多看看就好了,不理解的可以在群里交流。

扫一扫加我,注明:入群,加入群

扫一扫关注开源优测,原创文章首发平台

在里回复一下关键字获取对应的系列文章

物联网appium大数据测试RobotFrameworkPython自动驾驶jmeterseleniumjenkins接口测试

顺手点点点右下角的