美文网首页
验证码base64获取

验证码base64获取

作者: Xfyyzy | 来源:发表于2019-05-15 11:03 被阅读0次

目前遇到base64验证码的识别问题,使用代码无法解决。
最后的解决方案是:
1.拿到验证码图片的base64编码
2.使用在线解码网站解码
3.使用selenium进行截图
4.将截图用tesseract进行识别

具体代码如下:

browser.implicitly_wait(60)# 设置隐示等待60秒
#从mongodb获取数据
cursor  = col_old.find({"total_house":716}).batch_size(30).skip(100)
for item in cursor:
    n = 1
    name = item["residential_area"]
    url = "https://newhouse.cnnbfdc.com/project/page_1?q=%s"%name
    browser.get(url)
    residential_number =int(browser.find_element_by_xpath("//div[@class='listbody__head__result']/strong").text)
    if residential_number == 1:
        #使用selenium进行模拟解码操作(按照顺序进行网页点击)
        try:
            browser.find_element_by_xpath("//div[@class='group-left']/a/img").click()
            img_base64 = browser.find_element_by_xpath("//div[@class='latest-news-list']/div[1]/div[@class='latest-news-list__item__right']/ul/li[3]/img").get_attribute("src")
            browser.get("http://tool.chinaz.com/tools/imgtobase/")
            browser.find_element_by_id("basestr").clear()
            browser.find_element_by_id("basestr").send_keys(img_base64)
            browser.find_element_by_id("basetoimg").click()
            time.sleep(2)
            #以下获取验证码位置的方法有时不准确,具体原因没去寻找,等有空去寻找
            # img = browser.find_element_by_xpath("//div[@class='JsTxtCo bor-a1s h200 ptb10 plr10 pr']")
            # location = img.location
            # size = img.size
            # left = location['x']
            # top = location['y']
            # right = left + size['width']
            # bottom = top + size['height']
            browser.save_screenshot('code.png')
            page_snap_obj = Image.open('code.png')
            # print(left,top,right,bottom)
            #经过几次调整,获取该网页的合适截图坐标
            left = 34
            top = 320
            right = 100
            bottom  =345
            image_obj = page_snap_obj.crop((left, top, right, bottom))
            image_obj.save("code.png")
            image = Image.open("code.png")
            # 使用tesseract识别图片
            text = pytesseract.image_to_string(image, lang='eng', config="-psm 7")
            print(text)
            total_house = int(text)
            #将获得的数据更新到mongodb中
            col_old.update({"residential_area":item["residential_area"]},{"$set":{"total_house":total_house}},upsert=True)
            print("更新成功")
        except:
            print("出错")

相关文章

网友评论

      本文标题:验证码base64获取

      本文链接:https://www.haomeiwen.com/subject/uqnuaqtx.html