Category Archives: Python学习

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) 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 locator)… 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 »

Mitmproxy + Python安装和使用的一些问题

安装: pip3 install mitmproxy 国内: pip install mitmproxy -i http://pypi.douban.com/simple –trusted-host pypi.douban.com 如果’Microsoft Visual C++ Build Tools’错误,可以在https://visualstudio.microsoft.com/zh-hans/downloads/ 直接下载安装即可 如果’Dll load error…..’ 错误,安装VC https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads 检查是否安装成功: mitmdump –version 版本升级: pip install –upgrade mitmproxy 安装证书 访问 http://mitm.it/ 自动安装 手动: 命令 certutil -addstore root mitmproxy-ca-cert.cer 自定义脚本 : 脚本内容是实时修改生效 mitmdump -s xxx.py 指定代理 –mode upstream:http://192.168.0.1:8800 忽略HOST / 忽略多个host –ignore-hosts ^google\.com:443$… Read More »

Python Selenium提供的execute_script调用js的一些操作

调用js方法 execute_script(script, *args) 在当前窗口/框架 同步执行javaScript 脚本:JavaScript的执行。 *参数:适用任何JavaScript脚本。 使用: driver.execute_script(’document.title’) 滚动到目标视图 target = driver.find_element_by_xxxx() driver.execute_script("arguments[0].scrollIntoView();", target) 通过执行JavaScript中的代码删除target JS code document.getElementsByClassName("site-nav-right fr")[0].childNodes[1].removeAttribute("target") python js=’arguments[0].removeAttribute(argument[1])’ driver.execute_script(js,login_link,”target”)

python调用函数超时设置

1、Windows中sign报错,Linux能很好的使用: https://pypi.python.org/pypi/timeout-decorator import time import timeout_decorator @timeout_decorator.timeout(5) def mytest():     print("Start")     for i in range(1,10):         time.sleep(1)         print("{} seconds have passed".format(i)) if __name__ == ‘__main__’:     mytest() 2、Windows可以使用,Linux报错不能导入包 https://pypi.python.org/pypi/func_timeout from func_timeout import func_set_timeout, FunctionTimedOut @func_set_timeout(2.5) def mytest2():     print("Start")     for i… Read More »

Selenium:利用select模块处理下拉框

在利用selenium进行UI自动化测试过程中,经常会遇到下拉框选项,这篇博客,就介绍下如何利用selenium的Select模块来对标准select下拉框进行操作。。。 首先导入Select模块: # coding=utf-8 from selenium import webdriver from selenium.webdriver.support.select import Select 1、Select提供了三种选择某一项的方法 select_by_index          # 通过索引定位 select_by_value          # 通过value值定位 select_by_visible_text   # 通过文本值定位 注意事项: index索引是从“0”开始; value是option标签的一个属性值,并不是显示在下拉框中的值; visible_text是在option标签中间的值,是显示在下拉框的值; 2、Select提供了三种返回options信息的方法 options                  # 返回select元素所有的options all_selected_options     # 返回select元素中所有已选中的选项 first_selected_options   #… Read More »