SELENIUM+CHROME+MITMPROXY修改请求链接

这里要实现的功能是在windows7下用selenium打开chrome浏览器访问某个壁纸网页,这个壁纸只会显示一张壁纸,但每次访问得到的壁纸都不一样,这里用mitmproxy修改浏览器访问这个网页的某个链接,使他每次返回的图片都是同一张。访问网站:

https://wallpaper.wispx.cn/random

1.png

可以看到,里面的图片就是红色圈圈的链接所加载的静态资源,我们要做的就是拦截它的所有请求,并对它的其中一条做出修改:
下图是这个网址的所有请求


clipboard.png

每一次请求这个网站,最后一条链接都会不同,这里我们用mitmproxy修改,使他的请求每一次都是一样的。
环境安装:

python用的是3.7.5

selenium的安装:

pip install selenium

可能会报错,一般是缺少c++运行环境,去搜visualcppbuildtools full.exe下载安装。
chromedriver和chrome浏览器的安装:
chromedriver和chrome的版本要对应,
chromedriver去下面这个网址下载,注意chromedriver只有32位的:

http://chromedriver.storage.googleapis.com/index.html

chrome去这个网址下载:

https://www.chromedownloads.net/chrome32win/

mitmproxy的安装:

pip3 install mitmproxy

完成后,系统将拥有 mitmproxy、mitmdump、mitmweb 三个命令,由于 mitmproxy 命令不支持在 windows 系统中运行(这没关系,不用担心),我们可以拿 mitmdump 测试一下安装是否成功,执行:

mitmdump --version
成功后显示:
Mitmproxy: 4.0.1
Python: 3.6.5
OpenSSL: OpenSSL 1.1.0h 27 Mar 2018
Platform: Windows-10-10.0.16299-SP0

这里我们用mitmweb启动代理

上代码:

新建一个counts.py文件

import mitmproxy.http
from mitmproxy import ctx
class Counter:
    def __init__(self):
        self.num = 0
    def request(self, flow: mitmproxy.http.HTTPFlow):
        self.num = self.num + 1
        ctx.log.info("We've seen %d flows" % self.num)

新建addons.py文件

import counter
import joker
addons = [
    counter.Counter(),
    joker.Joker(),
]

新建joker.py文件

import mitmproxy.http
from mitmproxy import ctx, http
class Joker:
    def request(self, flow: mitmproxy.http.HTTPFlow):
        if flow.request.url.find("jpg") != -1 or flow.request.url.find("png") != -1:
            flow.request.url = "https://cdn.wispx.cn/wallpaper/2018/07/12/5bd04aee7591ab17cf517af60480384f.jpg"

这里判断请求中是否有jpg或png关键字,用的话就对它的链接进行替换

新建一个chromeRun.py,控制chrome行为

import os
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import random
import threading

class myThread(threading.Thread):
    def run(self):
        try:
            os.system('mitmweb -s addons.py')
        except Exception as e:
            print(e)
#启动代理,这里要单独开个线程,防止阻塞
myThread().start()
time.sleep(10)
for i in range(10):
    useAgent = 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1'
    url = "https://wallpaper.wispx.cn/random"
    options = Options()
    options.add_argument('--no-sanbox')
    #无头模式,是否显示浏览器界面
    #options.add_argument("--headless")
    #禁止使用插件
    options.add_argument('disable-plugins')
    options.add_argument('accept-language="zh-CN,en-US;q=0.8"')
    options.add_argument("--dns-prefetch-disable")
    options.add_argument("--disable-features=RendererCodeIntegrity")
    options.add_argument('user-agent="' + useAgent + '"')
    options.add_argument('--disable-gpu')
    options.add_argument('accept-encoding="gzip,deflate"')
    #设置代理,让访问的链接通过mitmproxy的代理端口
    options.add_argument('--proxy-server=http://localhost:8080')
    #忽略证书错误
    options.add_argument('--test-type=--ignore-certificate-errors')
    prefs = {
        'profile.default_content_settings.popups': 0,
        "profile.managed_default_content_settings.images": 1
    }
    options.add_experimental_option("prefs", prefs)
    options.add_experimental_option('excludeSwitches', ['enable-automation'])  # 专业模式
    
    browser = webdriver.Chrome("static/chromedriver.exe", options=options)
    browser.set_page_load_timeout(random.randint(30,55))
    try:
        browser.get(url)
    except Exception as e:
        print(e)
    time.sleep(10)
    browser.delete_all_cookies()
    browser.quit()

文件目录结构如下:

counts.py
joker.py
addons.py
chromeRun.py
static

chromedriver.exe

运行chromeRun.py,会在本机的默认浏览器上打开一个界面,记录访问的链接。


2019-12-11_160923.png

之后可以看到,10次循环,每次访问都是同一种壁纸

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容