8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

‘TwoCaptcha’ 对象没有属性 ‘normal’

Howcanoe Wang 2月前

125 0

我正在做一个项目,想在其中集成一个绕过验证码的功能。我一直在为此使用 2captcha 服务,而且它一直很成功,直到我从 Windows 切换到 Linux(Ubu...

我正在开发一个项目,想要集成一个验证码绕过功能。我一直在为此使用 2captcha 服务,在我从 Windows 切换到 Linux(Ubuntu 22.04)之前,它一直很成功。当 我尝试运行此功能时,我不断 “TwoCaptcha”对象没有属性“normal”

def solve_captcha(image_path):
    solver = TwoCaptcha(api_key)
    try:
        result = solver.normal(image_path)
    except Exception as e:
        logging.error(e)
    else:
        return result['code']

问题是,我在两个系统上安装了相同的库版本。转换后,我没有更改上述函数代码中的任何内容,官方文档在其示例中包含了该属性。

有人能帮助我理解这个问题吗?

我尝试搜索:库文档( https://pypi.org/project/2captcha-python/ )以及官方服务网页上的示例( https://2captcha.com/api-docs/normal-captcha ),但它们的代码中都包含“正常”属性。

帖子版权声明 1、本帖标题:‘TwoCaptcha’ 对象没有属性 ‘normal’
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Howcanoe Wang在本站《ubuntu》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 为了简化答案,假设。

    1. 没有转义字符。
    2. 代码仅使用双引号 (\')
    3. 双引号是单元格中的第一个字符和最后一个字符。
      => open 是行上的第一个字符或逗号后的第一个字符。
      => 关闭是该行的最后一个字符或紧接着的逗号。
    4. 并非所有单元格都使用引号,但所有带有逗号的单元格都使用引号。

    快速扫描 OA 输入数据似乎表明这些因素成立。但如果数据发生变化,您将需要重新验证。

    注意:扫描通用 CSV 文件时,这些条件可能不成立,因此您应该使用真正的解析器。但具有这些条件的良好 CSV 文件应该足够了。


    我会把这个问题分成两个问题。

    1. 扫描一条线
    2. 扫描一个值(单元格)。

    因此我会这样做:

    注意:未经代码审查,因此可能存在一些错误。请通过测试进行验证。

    #include <vector>
    #include <iostream>
    #include <fstream>
    #include <sstream>
    
    struct Value
    {
        std::string     value;
        friend std::ostream& operator<<(std::ostream& s, Value const& data)
        {
            s << data.value;
            return s;
        }
        friend std::istream& operator>>(std::istream& s, Value& data)
        {
            // assumes cell ends with a ',' or eof
            // Will remove the trailing ',' from the stream but not include it in the data
            // If cell is quoted (") then removes quotes does not add them to the data.
            // Assumes quotes are first and last character in cell.
    
            char peek = s.peek();
            if (peek != '"') {
                std::getline(s, data.value, ',');   // drops trailing comma
            }
            else {
                char get1 = s.get();                // gets leading quote
                std::getline(s, data.value, '"');  // drops tailing quote
                char get2 = s.get();                // gets trailing comma
            }
            return s;
        }
    };
    struct Line
    {
        std::vector<Value>        values;
        friend std::ostream& operator<<(std::ostream& s, Line const& data)
        {
            for (auto const& v: data.values) {
                s << v << ",";
            }
            return s;
        }
        friend std::istream& operator>>(std::istream& s, Line& data)
        {
            // assumes we can get a line of data with std::getline
            // All the data is in chunks of Value.
    
            std::string line;
            if (std::getline(s, line)) {
    
                std::stringstream   lineStream(std::move(line));
                std::vector<Value>  tmp{std::istream_iterator<Value>{lineStream}, std::istream_iterator<Value>{}};
                data.values = std::move(tmp);
            }
            return s;
        }
    };
    
    int main()
    {
        std::ifstream   csv("EbayPcLaptopsAndNetbooksUnclean.csv");
    
        Line    line;
        int     count = 0;
        int     lineSizeCount[1000] = {0};
        while(csv >> line) {
            ++count;
            ++lineSizeCount[line.values.size()];
        }
        std::cout << "Lines: " << count << "\n";
        for (int loop = 0; loop < 1000; ++loop) {
            if (lineSizeCount[loop] != 0) {
                std::cout << "  Size: " << loop << " => " << lineSizeCount[loop] << "\n";
            }
        }
    }
    
返回
作者最近主题: