繁体   English   中英

如何将 Python 代码转换为机器人框架

[英]How to convert Python Code to Robot Framework

我正在尝试使验证码自动化,我也为此编写了一个 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 实现相同的自动化,但由于会话超时而失败。 在我尝试下载图像的那一刻,验证码发生了变化。

参考这个例子: http ://seleniummaster.com/sitecontent/index.php/selenium-robot-framework-menu/selenium-robot-framework-python-menu/228-send-email-in-robot-framework-python -使用-gmail

此示例应有助于将 Python 代码转换为 Robot Framework 关键字。

按照以下步骤获取从机器人文件中调用的函数,

第 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

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM