开发者社区> 问答> 正文

如何将Python代码转换为Robot Framework

我正在尝试使CAPTCHA自动化,为此我也编写了python代码。现在,我陷入了困境,即无法通过创建自定义库在Robot Framework中调用它。

from PIL import Image
import string
import json
import os
import time
import pytesseract
import cv2
import numpy as np
import re
from tesserocr import PyTessBaseAPI,PSM, OEM
import time
import logging

captcha_url = "http://www.mca.gov.in/mcafoportal/getCapchaImage.do"
regex = re.compile(r'[\n\r\t ]')#special char plus space

def get_captcha2(session):
    res = session.get(captcha_url, timeout = 10)
    with open("a.jpg", "wb") as f: f.write(res.content)
    img = Image.open("a.jpg")
    captcha = pytesseract.image_to_string(img, config='--psm 8 --oem 0 -c tessedit_char_whitelist=abcdefghijklmnopqrstuvwxyz')
    logging.info("cap: %s"%captcha)
    while not (captcha.islower() and captcha.isalpha() and len(captcha) in  [6,7]):
        time.sleep(.05)
        res = session.get(captcha_url)
        with open("a.jpg", "wb") as f: f.write(res.content)
        img = Image.open("a.jpg")
        captcha = pytesseract.image_to_string(img, config='--psm 8')
        logging.info("cap: %s"%captcha)
    return captcha



def get_captcha(req):
    api = PyTessBaseAPI(psm=PSM.SINGLE_WORD, oem = 0)
    api.SetVariable("tessedit_char_whitelist", "abcdefghijklmnopqrstuvwxyz")
    res = req.get(captcha_url, timeout = 10)
    #with open("a.jpg", "wb") as f: f.write(res.content)
    clean_captcha_image(api, res.content)
    captcha = regex.sub("", api.GetUTF8Text())
    conf = api.MeanTextConf()
    cnt = 0
    while (len(captcha) not in  [6,7] or conf<=70) and cnt<=3:
        res = req.get(captcha_url, timeout = 10)
        clean_captcha_image(api, res.content)
        captcha = regex.sub("", api.GetUTF8Text())
        conf = api.MeanTextConf()
        cnt += 1
    return captcha


def break_point(arr):
    for i,n in arr:
        if n:
            break
    return i

def convert_numpy_ipl(trimmed):
    h,w = trimmed.shape
    c = 1
    iplimage = cv.CreateImageHeader((w,h), cv.IPL_DEPTH_8U, c)
    cv.SetData(iplimage, trimmed.tostring(),trimmed.dtype.itemsize * c * (w))
    return iplimage

def clean_captcha_image(api, c_content):
    try:
        arr = np.fromstring(c_content, np.uint8)
        image = cv2.imdecode(arr,0)
        th = cv2.threshold(image,50,255,cv2.THRESH_BINARY|cv2.THRESH_OTSU)[1]

        iplimage = Image.fromarray(th)
        api.SetImage(iplimage)
    except Exception as e:
        print("Unexpected error on clean ",e)


def parse_captcha(filename):
    return pytesseract.image_to_string(Image.open(filename))

if __name__ == "__main__":
    import requests
    session = requests.Session()
    session.headers = {"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36"}
    get_captcha2(session)

我尝试使用Robot Framework自动执行相同操作,但由于会话超时而失败。当我尝试下载图像时,验证码已更改。

展开
收起
祖安文状元 2020-02-22 18:24:23 1800 0
2 条回答
写回答
取消 提交回答
  • 注意外部依赖的环境变更配置

    2020-03-14 14:23:52
    赞同 展开评论 打赏
  • 请按照以下步骤从机器人文件中获取调用的功能,

    步骤1:使用以下函数创建python文件:C:\ Users \ kgurupra \ pyfirst.py

    def message(msg):
        print ('your message is ' + msg)
        return True
    
    

    第2步:确保PYTHONPATH中的.py文件非常重要

    第3步:如下所述创建您的机器人文件,

    *** Settings ***
    Library           String
    Library     Collections
    Library         Selenium2Library
    **Library         pyfirst.py**
    
    *** Test Cases ***
    Case1
        message    "hello"
    步骤4:您应该看到如下所示的输出,
    
    
    (rf1) C:\Users\kgurupra>robot rbpy.robot
    ==============================================================================
    Rbpy
    ==============================================================================
    Case1                                                                 | PASS |
    ------------------------------------------------------------------------------
    Rbpy                                                                  | PASS |
    1 critical test, 1 passed, 0 failed
    1 test total, 1 passed, 0 failed
    ==============================================================================
    Output:  C:\Users\kgurupra\output.xml
    Log:     C:\Users\kgurupra\log.html
    Report:  C:\Users\kgurupra\report.html
    
    2020-02-22 18:24:41
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载