Category Archives: Python学习

mitmproxy 单个链接配置不同的代理

本来目的是为了实现网址的图片访问不同的代理(本地代理)节约流量 可以实现针对性的给不同的URL配置不同代理 from mitmproxy import ctx, http from mitmproxy.connection import Server from mitmproxy.connection import ConnectionState from mitmproxy.net.server_spec import ServerSpec def requestheaders(flow: http.HTTPFlow) -> None:     #判断后缀,这些使用本地代理,不使用上级代理,options里需要启用: –set connection_strategy=lazy –set upstream_cert=false     current_url = flow.request.url     suffix = current_url.split(’.’)[-1]     proxy_address = flow.server_conn.via.address     if  suffix in [’jpg’,’png’,’ico’,’woff2′,’woff’,’mp4’]:      … Read More »

python win32 简单操作方法

查询句柄 # 根据类名及标题名查询句柄, hwnd = win32gui.FindWindow("Tfrm_YzzPlayer","叶子猪手游模拟器") # 查找指定句柄的子句柄,后两个参数为子类的类名与标题,如果没有或不确定,可以写None hwnd = win32gui.FindWindow(hwnd,None,"sub_class","sub_title") 修改窗口大小 # 没有直接修改窗口大小的方式,但可以曲线救国,几个参数分别表示句柄,起始点坐标,宽高度,是否重绘界面 ,如果想改变窗口大小,就必须指定起始点的坐标,没果对起始点坐标没有要求,随便写就可以;如果还想要放在原先的位置,就需要先获取之前的边框位置,再调用该方法即可 win32gui.MoveWindow(hwnd,20,20,405,756,True) 前台后台 # 指定句柄设置为前台,也就是激活 win32gui.SetForegroundWindow(hwnd) # 设置为后台 win32gui.SetBkMode(hwnd, win32con.TRANSPARENT) 按键 # 在这里两几种方式可以选择 可以使用win32gui包和win32api的包,目前未深入了解,感觉是一样的,每一个里面还有PostMessage与SendMessage两都可选,依据其他文档的说法是SendMessage是同步的,在成功执行后才会返回,而PostMessage是异步执行的,直接返回,只是把内容加在队列里 # 几个参数分别为: 操作的句柄 , 按键的类型(是按下或者是弹起), 键码(大部分的功能键在win32con包中都,对于常用的数字或字母,直接去查找ASII码即可,如A 65 等等),相对于句柄中的位置(在这里需要使用win32api.MAKELONG(x,y)将两个地址转换为一个长地址; # 在这种情况下,可以做到后台的操作 # 需要注意的是每一个按键要有按下与弹起两个过程,比果我们要按Enter键,就需要有两句代码,第二个参数分别为 KEYDOAWN与 KEYUP ,如果是组合键,就先把组合键分别按下后再分别弹起即可 # win32gui.PostMessage(tid, win32con.WM_KEYDOWN, win32con.VK_RETURN, 0) # win32gui.SendMessage(tid, win32con.WM_KEYDOWN, win32con.VK_RETURN, 0) win32api.SendMessage(hwd, win32con.WM_LBUTTONDOWN,… Read More »

python 批量修改文件后缀

python一键批量修改文件后缀! # python批量更换后缀名 import os # 列出当前目录下所有的文件 files = os.listdir(’.’) for filename in files:     portion = os.path.splitext(filename)     # 如果后缀是.dat     if portion[1] == ".gif":           # 重新组合文件名和后缀名         newname = portion[0] + ".png"           os.rename(filename,newname)

Python 批量压缩图片

方法1: 10 行 Python 代码,批量压缩图片 500 张 Tinypng 网站提供在线图片压缩服务,是所有图片压缩工具中最好用的之一,但它有所限制:批量最多处理 20 张,且每张大小不允许超过 5 M. 但是这个网站非常良心,开放了免费的 API,API 取消了每张大小的限制,只限定每个月处理 500 张图片. 下面介绍怎么使用它.第一步是在它网站上注册,获得专属的 API_KEY.使用的是邮箱注册,很简单. 然后是安装 package: pip install tinify 接着是处理图片: import tinify import os tinify.key = ‘此处填入你的key’ path = "C:\\Users\\yunpoyue\\Pictures\\cat" # 图片存放的路径 for dirpath, dirs, files in os.walk(path):     for file in files:         imgpath… Read More »

Python 操作图片识别,对比,验证码之PIL,pytesseract

安装python包 pip3 install pillow pip3 install pytesseract pytesseract的使用需要安装对应的Tesseract-OCR程序,无论是windows系统还是Lunix系统,都可以到GitHub下载相关版本。 链接:https://github.com/tesseract-ocr/tesseract/ 安装完成后,把你安装tesseract的路径添加到你电脑的环境变量path中, 或者修改pytesseract.py文件,指定tesseract.exe安装路径 # CHANGE THIS IF TESSERACT IS NOT IN YOUR PATH, OR IS NAMED DIFFERENTLY tesseract_cmd = ‘C:\\Program Files (x86)\\Tesseract-OCR\\tesseract.exe’ 或者在实际运行中指定路径 pytesseract.pytesseract.tesseract_cmd = ‘D:\\Program Files\\Tesseract-OCR\\tesseract.exe’ 读取图片里面文字: from PIL import Image import pytesseract img = Image.open(’test1.png’) text = pytesseract.image_to_string(img, lang=’eng’) print(text) image_to_string函式有一个关键字引数 lang,默认是英文,可以改变成你想要的语言字串 pytesseract.image_to_string(img, lang=’eng’,config=’–psm 11… Read More »

Selenium 中ExpectedConditions 用法说明(最全整理)

首先导入包 from selenium.webdriver.support import expected_conditions as EC 1,判断当前页面的title是否精确等于预期 titleIs( String title) EC.title_is(‘Google’) 2,判断当前页面的title是否包含预期字符串 titleContains( String title) if EC.title_contains(’google’):   ##等于 if ‘google’ in driver.title: 3,判断当前页面的url是否精确等于预期 urlToBe( String url) 4,判断当前页面的url是否包含预期字符串 urlContains( String fraction) 5,当前URL字符串正则表达式匹配 urlMatches( String regex) 6,判断元素是否出现,只要有一个元素出现,就通过。(出现不代表可见) 判断是否至少有 1 个元素存在于 dom 树中。举个例子,如果页面上有 n 个元素的 class 都是’column-md-3’,那么只要有 1 个元素存在,这个方法就返回 True。 presenceOfElementLocated( By locator) 7,判断元素是否出现,必须所有符合条件的元素都加载出来,才通过。 presenceOfElementsLocated( By… Read More »

mitmproxy抓https出现502Bad Gateway. unable to get local issuer certificate的解决方法

502 Bad Gateway. Certificate Verification Error for www.xxxx.com: unable to get local issuer certificate (errno: 20, depth: 0) 想到可能是当前证书不支持,网上找一个最新的cacert.pem替换certifi包(xx\python36\Lib\site-packages\certifi)目录的证书,再次使用可以抓到包了。 参考资料 https://github.com/mitmproxy/mitmproxy/issues/1608 https://curl.haxx.se/docs/caextract.html

使用MitmProxy绕过Content Security Policy (CSP)

这几天测试用Selenium 和 Chrome插件都无法在 谷歌插件商店https://chrome.google.com/webstore/category/extensions?hl=en 实现JS注入 检查发现响应头里面有一个 ‘content-security-policy’,错误提示: "Refused to execute inline script because it violates the following Content Security Policy directive: "script-src ‘report-sample’ ‘nonce-wNKF1pjNhZent+g6jyFL9g’ ‘unsafe-inline’ ‘unsafe-eval’". Note that ‘unsafe-inline’ is ignored if either a hash or nonce value is present in the source list." CSP全称Content Security Policy ,可以直接翻译为内容安全策略,说白了,就是为了页面内容安全而制定的一系列防护策略. 通过CSP所约束的的规责指定可信的内容来源(这里的内容可以指脚本、图片、iframe、fton、style等等可能的远程的资源)。通过CSP协定,让WEB处于一个安全的运行环境中. 我这里使用MitmProxy绕过CSP执行JS注入 脚本如下 from bs4 import BeautifulSoup… Read More »

使用mitmproxy实现JS注入的脚本

injected-javascript的JS注入脚本 ((time) => {   const handleDocumentLoaded = () => {     document.getElementById("injected-time").innerHTML = time;   };   if (document.readyState === "loading") {     document.addEventListener("DOMContentLoaded", handleDocumentLoaded);   } else {     handleDocumentLoaded();   } })(Date.now()); mitmproxy脚本 from bs4 import BeautifulSoup from mitmproxy import ctx # Load in the javascript to inject. with… Read More »