网页验证码破解、使用cookie登录

2023-11-20

十二周内容笔记

day34

01-芝麻代理作业

主要是练习了一下显式等待,写起来还是比较麻烦,但是还挺好用

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
s = Service(executable_path='../day32/chromedriver.exe')
browser = webdriver.Chrome(service=s)
URL = 'https://jahttp.zhimaruanjian.com/'
browser.get(url=URL)
# 作业内容:显式等待芝麻代理网站用户名是否出现
flag = EC.text_to_be_present_in_element(
    (By.XPATH, '/html/body/section/aside/div[1]/a'),
    'zmhttp994457'
)
WebDriverWait(browser, timeout=60).until(flag)
print('登陆成功')

02-webdriver-manager模块的使用

一、webdriver-manager介绍

1.谷歌浏览器版本需要和selenium所需驱动版本一一对应,webdriver-manager可以自动检测浏览器的版本自动下载驱动。

2.webdriver-manager运行只需几行代码,并且官方文档给了,可以直接复制。

二、安装

pip install webdriver-manager

查看已安装三方模块细节:pip show webdriver-manager

三、使用

from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
# 从webdriver-manager的chrome包中导入ChromeDriverManager方法
from webdriver_manager.chrome import ChromeDriverManager
# ChromeDriverManager().install():自动检测电脑上的Chrome浏览器的版本,下载对应驱动
driver_path = './'
driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager(path=driver_path).install()))

03-iframe标签切换

如果你需要使用selenium自动化在输入框中输入内容及自动化点击按钮,尤其是涉及到selenium登陆账号时,一定要特别小心iframe标签。

不过也比较简单,知道有的时候切换过去就行。 以下是qq音乐登录的例子

from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.common.by import By
# 从webdriver-manager的chrome包中导入ChromeDriverManager方法
from webdriver_manager.chrome import ChromeDriverManager
# ChromeDriverManager().install():自动检测电脑上的Chrome浏览器的版本,下载对应驱动
driver_path = './'
browser = webdriver.Chrome(service=ChromeService(ChromeDriverManager(path=driver_path).install()))
browser.implicitly_wait(10)
URL = 'https://y.qq.com/'
browser.get(url=URL)
# 点击QQ音乐右上角登录按钮
browser.find_element(By.XPATH, '//*[@id="app"]/div/div[1]/div/div[2]/span/a').click()
# 先进行iframe标签切换:iframe标签从外向内一层一层切换
iframe_1 = browser.find_element(By.XPATH, '//*[@id="login_frame"]')
browser.switch_to.frame(iframe_1)

iframe_2 = browser.find_element(By.XPATH, '//*[@id="ptlogin_iframe"]')
browser.switch_to.frame(iframe_2)

# 此时,browser就从最外层页面到了最内层iframe,如果还想再切回去
# browser.switch_to.default_content():可以一步到位直接切到最外层

# 再从弹出来的弹窗中点击”密码登录“
browser.find_element(By.XPATH, '//*[@id="switcher_plogin"]').click()

# 输入账号密码、点击登录
input_field_username = browser.find_element(By.XPATH, '//*[@id="u"]')
input_field_username.send_keys('你的账号')
input_field_password = browser.find_element(By.XPATH, '//*[@id="p"]')
input_field_password.send_keys('你的密码')
browser.find_element(By.XPATH, '//*[@id="login_button"]').click()

04-淘宝页面爬取之输入账号密码

淘宝不登陆不让搜索东西,想要有动作必须先登录。此处只是简单的输入账号密码,还没有涉及到点击登陆后检测到selenium的滑块验证码无法通过。这里用了getpass模块,不显示输入内容,老师在讲课的时候为了不暴露淘宝密码才用的,比较麻烦的是要在终端中运行,不能直接右键运行。

from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.common.by import By
# 从webdriver-manager的chrome包中导入ChromeDriverManager方法
from webdriver_manager.chrome import ChromeDriverManager

# ChromeDriverManager().install():自动检测电脑上的Chrome浏览器的版本,下载对应驱动
driver_path = './'
# 引入配置项
s = ChromeService(ChromeDriverManager(path=driver_path).install())
Options = webdriver.ChromeOptions()
# 引入不关闭浏览器的相关配置项
Options.add_experimental_option("detach", True)
# 避免终端下执行代码报警告
Options.add_experimental_option("excludeSwitches", ['enable-automation', 'enable-logging'])

browser = webdriver.Chrome(service=s, options=Options)
URL = 'https://www.taobao.com/'
browser.get(url=URL)
# 淘宝必须登录,否则没办法使用
# 点击淘宝页面上方的”亲,请登录“
browser.find_element(By.XPATH, '//*[@id="J_SiteNavLogin"]/div[1]/div[1]/a[1]').click()
# 寻找账号密码输入框,点击登录按钮
user_name = input('请输入账号:')
browser.find_element(By.XPATH, '//*[@id="fm-login-id"]').send_keys(user_name)
import getpass
# getpass模块中的getpass方法,能够不显示输入的内容
# 如果程序用了getpass方法,不能直接右键执行,必须在终端中使用命令执行:python ./day34/04-淘宝页面爬取(一).py
password = getpass.getpass('请输入密码:')
browser.find_element(By.XPATH, '//*[@id="fm-login-password"]').send_keys(password)

day35

01-淘宝页面爬取之滑块破解

检测到selenium后,登录出现的滑块验证码无法验证通过,这时候就需要防止selenium被监测到。主要是在点击请登陆后进行一个selenium的反检测。

# 点击淘宝页面上方的”亲,请登录“
browser.find_element(By.XPATH, '//*[@id="J_SiteNavLogin"]/div[1]/div[1]/a[1]').click()
# 寻找账号密码输入框,点击登录按钮

# 跳转到登陆页面之后再尝试修改selenium的一些特性
# 防止selenium被监测,先修改js(改掉selenium的一些特性),再加载js(再去加载网页的js)
browser.execute_cdp_cmd(
    "Page.addScriptToEvaluateOnNewDocument",
    {
        "source": "Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"
    }
)
# 使用刷新重新加载页面:refresh()
browser.refresh()

user_name = input('请输入账号:')
browser.find_element(By.XPATH, '//*[@id="fm-login-id"]').send_keys(user_name)
import getpass
# getpass模块中的getpass方法,能够不显示输入的内容
# 如果程序用了getpass方法,不能直接右键执行,必须在终端中使用命令执行:python ./day35/01-淘宝页面爬取之滑块破解.py
password = getpass.getpass('请输入密码:')
browser.find_element(By.XPATH, '//*[@id="fm-login-password"]').send_keys(password)

我说实话有点拉胯,或者说淘宝反爬做得挺牛,反正我弄了以后滑块还是验证失败,不过这个问题也不大,有更先进简洁的方法。

02-淘宝爬虫之cookie获取

获取cookie进行登录是相对于selenium进行账号密码登录,更好的爬取淘宝的选择。

cookie:网页在被我们访问时,会产生一个叫做cookie的东西,如果你在网页中登陆了账号,cookie中就会保存有你的账号密码的加密形式的信息。通过未过期的cookie,便可以随意登录此网站。

cookie具有时效性(生命周期):几分钟、几个小时、几天不等。

from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.common.by import By
# 从webdriver-manager的chrome包中导入ChromeDriverManager方法
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# ChromeDriverManager().install():自动检测电脑上的Chrome浏览器的版本,下载对应驱动
driver_path = './'
# 引入配置项
s = ChromeService(ChromeDriverManager(path=driver_path).install())
Options = webdriver.ChromeOptions()
# 引入不关闭浏览器的相关配置项
Options.add_experimental_option("detach", True)
# 避免终端下执行代码报警告
Options.add_experimental_option("excludeSwitches", ['enable-automation', 'enable-logging'])

browser = webdriver.Chrome(service=s, options=Options)
# 网页对selenium做检测,检测代码存在于王爷的JavaScript代码中

URL = 'https://www.taobao.com/'
browser.get(url=URL)
# 淘宝必须登录,否则没办法使用
# 点击淘宝页面上方的”亲,请登录“
browser.find_element(By.XPATH, '//*[@id="J_SiteNavLogin"]/div[1]/div[1]/a[1]').click()
# 在登录页面点击二维码进行扫码登陆
browser.find_element(By.XPATH, '//*[@id="login"]/div[1]/i').click()
# 需要用户手动扫码登录

# 在等待登录成功的过程,最大化的节约时间,使用显式等待,等待用户登陆成功(网页中出现了用户名)
flag = EC.text_to_be_present_in_element(
    (By.XPATH, '//*[@id="J_SiteNavLogin"]/div[1]/div/a'),
    'tb612264626'
    )
WebDriverWait(browser, 90).until(flag)
print('登陆成功')
# 获取cookie,将cookie写入txt文本文件
# get_cookies():selenium获取cookie
# cookie的形式是json数据,只不过get_cookies()已经帮我们转为了字典
my_cookie = browser.get_cookies()
with open('./cookies.txt', 'w') as file:
    file.write(str(my_cookie))

print('cookie写入成功')
browser.quit()

03-淘宝爬虫之使用cookie进行登录

结合上面的操作获取到的cookie文本文件进行登录

from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.common.by import By
# 从webdriver-manager的chrome包中导入ChromeDriverManager方法
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# ChromeDriverManager().install():自动检测电脑上的Chrome浏览器的版本,下载对应驱动
driver_path = './'
# 引入配置项
s = ChromeService(ChromeDriverManager(path=driver_path).install())
Options = webdriver.ChromeOptions()
# 引入不关闭浏览器的相关配置项
Options.add_experimental_option("detach", True)
# 避免终端下执行代码报警告
Options.add_experimental_option("excludeSwitches", ['enable-automation', 'enable-logging'])

browser = webdriver.Chrome(service=s, options=Options)
# 网页对selenium做检测,检测代码存在于网页的JavaScript代码中

URL = 'https://www.taobao.com/'
browser.get(url=URL)

# 先使用selenium访问淘宝,然后将才获取到的cookie进行注入,即可实现登陆操作。
with open('./cookies.txt', 'r') as file:
    # 读取cookie并转换为python的字典
    result = eval(file.read())

for i in result:
    # 将每一个cookie字典注入到网页中
    # cookie中可能会涉及到一个secure安全性字段,一般情况下此字段不会产生影响
    # 正常情况下可以这么写:
    if i['secure'] == True:
        browser.add_cookie(i)

browser.refresh()
# 淘宝登陆成功

04-验证码破解

常见验证码形式:

1.图片 + 数字 + 字母

2.滑块验证(淘宝的纯滑块、京东的滑块 + 拼图)

3.图片 + 数学题

4.九宫格:选择消防栓、红绿灯、公共汽车、小轿车、斑马线等

5.旋转图片,转正

6.依次点击文字

7.看草图点击九宫格图

8.游戏战斗场景

9.轨迹验证

05-图片文字验证码破解

图片中有文字,需要使用到OCR光学文字识别。python也有OCR光学文字识别的模块,可以进行文字识别,即EasyOCR模块,准确率90%+,国内有百度飞浆,准确率比EasyOCR高一些。

EasyOCR的安装:体积不小的,用一手清华镜像源下载。

pip install easyocr -i https://pypi.tuna.tsinghua.edu.cn/simple

day36

01-easyocr的使用

一、OCR简介

OCR光学文字识别,是指电子设备检查纸上打印的字符,通过检测暗、亮的模式确定其形状,然后将字符识别成计算机文字的过程。

二、easyocr识别

import easyocr
# 创建easyocr的读方法对象
read_photo = easyocr.Reader(
    # 1.'ch_esim':简体中文
    lang_list=['ch_sim', 'en'],
    # 2.不使用gpu,如果要使用gpu,需要下载对应gpu架构的一些文件,英伟达的gpu需要下载CUDNN、CUDA
    gpu=False,
    # 3.download_enabled=False:禁止下载模型文件,模型文件存放在国外服务器,90%的人会下载失败
    download_enabled=False,
    # 4.禁止下载的模型文件提前下载好,放到指定路径
    model_storage_directory='./model'
)
# 识别图片
# image参数应该传递图片数据,图片路径或图片的numpy数组或图片的二进制数据均可。
result = read_photo.readtext(image='./img.png')
print(result)

02-网页验证码破解(一)

使用easyocr对阿里云邮箱简单的数字和字母图片验证码识别。

import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.common.by import By
# 从webdriver-manager的chrome包中导入ChromeDriverManager方法
from webdriver_manager.chrome import ChromeDriverManager

# ChromeDriverManager().install():自动检测电脑上的Chrome浏览器的版本,下载对应驱动
driver_path = './'
# 引入配置项
s = ChromeService(ChromeDriverManager(path=driver_path).install())
Options = webdriver.ChromeOptions()
# 引入不关闭浏览器的相关配置项
Options.add_experimental_option("detach", True)
# 避免终端下执行代码报警告
Options.add_experimental_option("excludeSwitches", ['enable-automation', 'enable-logging'])

browser = webdriver.Chrome(service=s, options=Options)
# 网页对selenium做检测,检测代码存在于网页的JavaScript代码中

URL = 'http://mail.1000phone.com/alimail/auth/login?custom_login_flag=1&reurl=%2Falimail%2F'
browser.get(url=URL)

# 请求完阿里邮箱,找账号输入框随便输入内容,然后点击密码输入框,等待验证码出现
iframe_1 = browser.find_element(By.XPATH, '//*[@id="page"]/div[2]/div/div/iframe')
browser.switch_to.frame(iframe_1)
iframe_2 = browser.find_element(By.XPATH, '//*[@id="ding-login-iframe"]')
browser.switch_to.frame(iframe_2)
browser.find_element(By.XPATH, '//*[@id="username"]').send_keys('1231231231')
browser.find_element(By.XPATH, '//*[@id="password"]').click()

# 使用selenium针对页面验证码截图
# 休眠3秒钟等待验证码出现
time.sleep(3)
# screenshot():selenium的截图操作,可以根据指定的元素进行截图
img_path = './cap.png'
browser.find_element(By.XPATH, '//*[@id="login_checkcode_ico"]').screenshot(img_path)
import easyocr
read_photo = easyocr.Reader(
    lang_list=['ch_sim', 'en'],
    gpu=False,
    download_enabled=False,
    model_storage_directory='./model'
)
result = read_photo.readtext(image=img_path)[0][-2]
print(f'识别到的验证码结果为{result}')

虽然说easyocr识别率达到了90%多,但是毕竟是白嫖的打不过充钱的,超级鹰让你感受到充钱的快乐。

03-网页验证码破解(二)

下面就是调用超级鹰对简单验证码进行破解,超级鹰的配置文件我就不写了

import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.common.by import By
# 从webdriver-manager的chrome包中导入ChromeDriverManager方法
from webdriver_manager.chrome import ChromeDriverManager

# ChromeDriverManager().install():自动检测电脑上的Chrome浏览器的版本,下载对应驱动
driver_path = './'
# 引入配置项
s = ChromeService(ChromeDriverManager(path=driver_path).install())
Options = webdriver.ChromeOptions()
# 引入不关闭浏览器的相关配置项
Options.add_experimental_option("detach", True)
# 避免终端下执行代码报警告
Options.add_experimental_option("excludeSwitches", ['enable-automation', 'enable-logging'])

browser = webdriver.Chrome(service=s, options=Options)
# 网页对selenium做检测,检测代码存在于网页的JavaScript代码中

URL = 'http://mail.1000phone.com/alimail/auth/login?custom_login_flag=1&reurl=%2Falimail%2F'
browser.get(url=URL)

# 请求完阿里邮箱,找账号输入框随便输入内容,然后点击密码输入框,等待验证码出现
iframe_1 = browser.find_element(By.XPATH, '//*[@id="page"]/div[2]/div/div/iframe')
browser.switch_to.frame(iframe_1)
iframe_2 = browser.find_element(By.XPATH, '//*[@id="ding-login-iframe"]')
browser.switch_to.frame(iframe_2)
browser.find_element(By.XPATH, '//*[@id="username"]').send_keys('1231231231')
browser.find_element(By.XPATH, '//*[@id="password"]').click()

# 使用selenium针对页面验证码截图
# 休眠3秒钟等待验证码出现
time.sleep(3)
# screenshot():selenium的截图操作,可以根据指定的元素进行截图
img_path = './cap.png'
browser.find_element(By.XPATH, '//*[@id="login_checkcode_ico"]').screenshot(img_path)
# 导入超级鹰服务
from chaojiying import Chaojiying_Client
# 实例化超级鹰对象
cjy = Chaojiying_Client('超级鹰账号', '超级鹰密码', '948081')
# 给超级鹰传递图片二进制数据
img = open(img_path, 'rb').read()
result = cjy.PostPic(img, 1902)
print(f'识别到的验证码结果为:{result["pic_str"]}')

04-selenium简单的鼠标事件

ActionChains作用:能够将鼠标的操作步骤按照操作顺序记录下来,然后等待perform的调用,依次被触发。

开始对b站进行登录操作

from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.common.by import By
# 从webdriver-manager的chrome包中导入ChromeDriverManager方法
from webdriver_manager.chrome import ChromeDriverManager

# ChromeDriverManager().install():自动检测电脑上的Chrome浏览器的版本,下载对应驱动
driver_path = './'
# 引入配置项
s = ChromeService(ChromeDriverManager(path=driver_path).install())
Options = webdriver.ChromeOptions()
# 引入不关闭浏览器的相关配置项
Options.add_experimental_option("detach", True)
# 避免终端下执行代码报警告
Options.add_experimental_option("excludeSwitches", ['enable-automation', 'enable-logging'])

browser = webdriver.Chrome(service=s, options=Options)
# 网页对selenium做检测,检测代码存在于网页的JavaScript代码中

URL = 'https://www.bilibili.com/'
browser.get(url=URL)
# 请求了页面之后按照bilibili首页的一些提示性内容,先把鼠标移动到”立即登录“按钮,再点击
from selenium.webdriver.common.action_chains import ActionChains
# 创建ActionChains对象,捕获浏览器对象
ac = ActionChains(browser)
login_button = browser.find_element(By.XPATH, '//*[@id="i_cecream"]/div[2]/div[1]/div[1]/ul[2]/li[1]/li')
# move_to_element():将鼠标移动到某个元素中间
ac.move_to_element(login_button)
ac.click()
# 调用已经存储的步骤
ac.perform()

05-网页验证码的破解(三)

对b站登陆的依次点击文字的验证码和二次验证的破解,我玩了很多次也没碰上他的二次验证,不知道是什么原因,说他厉害又厉害,说不厉害也有点垃圾,直接点击取消二次验证就给他绕过了。

很多注释细节在代码里面

import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.common.by import By
# 从webdriver-manager的chrome包中导入ChromeDriverManager方法
from webdriver_manager.chrome import ChromeDriverManager

# ChromeDriverManager().install():自动检测电脑上的Chrome浏览器的版本,下载对应驱动
driver_path = './'
# 引入配置项
s = ChromeService(ChromeDriverManager(path=driver_path).install())
Options = webdriver.ChromeOptions()
# 引入不关闭浏览器的相关配置项
Options.add_experimental_option("detach", True)
# 避免终端下执行代码报警告
Options.add_experimental_option("excludeSwitches", ['enable-automation', 'enable-logging'])

browser = webdriver.Chrome(service=s, options=Options)
# 网页对selenium做检测,检测代码存在于网页的JavaScript代码中

URL = 'https://www.bilibili.com/'
browser.get(url=URL)
# 请求了页面之后按照bilibili首页的一些提示性内容,先把鼠标移动到”立即登录“按钮,再点击
from selenium.webdriver.common.action_chains import ActionChains

# 创建ActionChains对象,捕获浏览器对象
ac = ActionChains(browser)
time.sleep(1)
login_button = browser.find_element(By.XPATH, '//*[@id="i_cecream"]/div[2]/div[1]/div[1]/ul[2]/li[1]')
# move_to_element():将鼠标移动到某个元素中间
ac.move_to_element(login_button)
ac.click()
# 调用已经存储的步骤
ac.perform()  # 此时已经实现打开bilibili登录界面
time.sleep(1)
# 接下来寻找账号、密码输入框,点击登录按钮
user = browser.find_element(By.XPATH, '/html/body/div[3]/div/div[4]/div[2]/form/div[1]/input')
user.send_keys('账号')
pwd = browser.find_element(By.XPATH, '/html/body/div[3]/div/div[4]/div[2]/form/div[3]/input')
pwd.send_keys('密码')
time.sleep(2)
login = browser.find_element(By.XPATH, '/html/body/div[3]/div/div[4]/div[2]/div[2]/div[2]').click()
time.sleep(2)
# bilibili有可能出现”二次校验窗口“
if '<div class="dialog__mask" style="">' in browser.page_source:
    # 点击”二次校验“的取消按钮
    browser.find_element(By.XPATH, '/html/body/div[3]/div/div[4]/div[2]/div[1]/div/div[2]/div[1]').click()
    # 重新点登录
    login = browser.find_element(By.XPATH, '/html/body/div[3]/div/div[4]/div[2]/div[2]/div[2]').click()
# 寻找验证码
captcha = browser.find_element(By.XPATH, '/html/body/div[4]/div[2]/div[6]/div/div')
# 截图
bilibili_path = './bilibili_image.png'
captcha.screenshot(bilibili_path)
# 获取验证码的location和size属性
bili_location, bili_size = captcha.location, captcha.size
# bili_location:验证码距离网页远点(左上角)的距离(x, y)
# bili_size:验证码的宽(width)、高(height)
# 将截图上传给超级鹰
from chaojiying import Chaojiying_Client
# 实例化超级鹰对象
cjy = Chaojiying_Client('超级鹰账号', '超级鹰密码', '948081')
# 给超级鹰传递图片二进制数据
img = open(bilibili_path, 'rb').read()
result = cjy.PostPic(img, 9004)

if result['err_no'] == 0:
    ac = ActionChains(browser)
    # 构建每个字的坐标
    for item in result['pic_str'].split('|'):
        x, y = item.split(',')
        # move_to_element_with_offset(元素, x, y):将鼠标从指定的元素中间按照指定的偏移量(x, y)移动
        # -(bili_size['width'] / 2) + x, -(bili_size['height'] / 2 + y):表示先将鼠标移动到验证码的左边和上边
        ac.move_to_element_with_offset(captcha, -(bili_size['width'] / 2) + int(x), -(bili_size['height'] / 2) + int(y)).click()
        # 不要点太快
        time.sleep(1)
    # for循环结束,一次性释放ac的顺序功能
    ac.perform()

最后对文字的点击鼠标移动的计算我刚开始还没想明白,纠结了一会儿还是明白了,鼠标位置刚开始是在验证码页面的中心点,分别减去验证码页面的一半就是为了让鼠标位置到达左上角,再去按照(x, y)对文字进行点击。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

网页验证码破解、使用cookie登录 的相关文章

  • 使用 matplotlib 从“列表列表”绘制 3D 曲面

    我已经搜索了一些 虽然我可以找到许多有用的网格网格示例 但没有一个清楚地表明我如何将列表列表中的数据转换为可接受的形式 以适应我所讨论的各种方式 当谈到 numpy matplotlib 以及我所看到的建议的术语和步骤顺序时 我有点迷失 我
  • 递归 lambda 表达式可能吗?

    我正在尝试编写一个调用自身的 lambda 表达式 但我似乎找不到任何语法 或者即使它是可能的 本质上我想将以下函数传输到以下 lambda 表达式中 我意识到这是一个愚蠢的应用程序 它只是添加 但我正在探索可以在 python 中使用 l
  • 如何在Python中流式传输和操作大数据文件

    我有一个相对较大 1 GB 的文本文件 我想通过跨类别求和来减小其大小 Geography AgeGroup Gender Race Count County1 1 M 1 12 County1 2 M 1 3 County1 2 M 2
  • Sublime Text 插件开发中的全局 Python 包

    一 总结 我不知道 Sublime Text 插件开发人员如何使用 Sublime Text 查找全局 Python 包 而不是 Sublime Text 目录的 Python 包 Sublime Text使用自己的Python环境 而不是
  • Pandas:GroupBy 到 DataFrame

    参考这个关于 groupby 到 dataframe 的非常流行的问题 https stackoverflow com questions 10373660 converting a pandas groupby object to dat
  • 保留完整姓氏,在 pandas 列中获取名字的首字母(如果有的话,还有中间名)

    我有一个 pandas 数据框 其中有一列表示几位网球运动员的姓氏和姓名 如下所示 Player 0 Roddick Andy 1 Federer Roger 2 Tsonga Jo Wilfred 我想保留完整的姓氏并获取姓名的首字母和中
  • 如果未引发异常,则通过 Python 单元测试

    在Python中unittest框架 是否有一种方法可以在未引发异常的情况下通过单元测试 否则会因 AssertRaise 而失败 如果我正确理解你的问题 你could做这样的事情 def test does not raise on va
  • 在没有模型的情况下将自定义页面添加到 django admin

    我正在尝试在没有模型关联的情况下向管理员添加自定义页面 这就是我迄今为止所取得的成就 class MyCustomAdmin AdminSite def get urls self from django conf urls import
  • Keras:如何保存模型或权重?

    如果这个问题看起来很简单 我很抱歉 但是阅读 Keras 保存和恢复帮助页面 https www tensorflow org beta tutorials keras save and restore models https www t
  • Django 的 request.FILES 出现 UnicodeDecodeError

    我在视图调用中有以下代码 def view request body u for filename f in request FILES items body body Filename filename n f read n 在某些情况下
  • Geodjango距离查询未检索到正确的结果

    我正在尝试根据地理位置的接近程度来检索一些帖子 正如您在代码中看到的 我正在使用 GeoDjango 并且代码在视图中执行 问题是距离过滤器似乎被完全忽略了 当我检查查询集上的距离时 我得到了预期距离 1m 和 18km 但 18km 的帖
  • Matplotlib 中 x 轴标签的频率和旋转

    我在下面编写了一个简单的脚本来使用 matplotlib 生成图形 我想将 x tick 频率从每月增加到每周并轮换标签 我不知道从哪里开始 x 轴频率 我的旋转线产生错误 TypeError set xticks got an unexp
  • 使用“默认”环境变量启动新的子进程

    我正在编写一个构建脚本来解析依赖的共享库 及其共享库等 这些共享库在正常情况下是不存在的PATH环境变量 为了使构建过程正常工作 让编译器找到这些库 PATH已更改为包含这些库的目录 构建过程是这样的 加载器脚本 更改 PATH gt 基于
  • SocketIO + Flask 检测断开连接

    我在这里有一个不同的问题 但意识到它可以简化为 如何检测客户端何时从页面断开连接 关闭其页面或单击链接 换句话说 套接字连接关闭 我想制作一个带有更新用户列表的聊天应用程序 并且我在 Python 上使用 Flask 当用户连接时 浏览器发
  • Python SSL X509:KEY_VALUES_MISMATCH

    Python HTTPS server from http server import HTTPServer SimpleHTTPRequestHandler import ssl https stackoverflow com a 408
  • Django Admin 中的反向内联

    我有以下 2 个型号 现在我需要将模型 A 内联到模型 B 的页面上 模型 py class A models Model name models CharField max length 50 class B models Model n
  • 混淆矩阵不支持多标签指示符

    multilabel indicator is not supported是我在尝试运行时收到的错误消息 confusion matrix y test predictions y test is a DataFrame其形状为 Horse
  • TKinter 中的禁用/启用按钮

    我正在尝试制作一个像开关一样的按钮 所以如果我单击禁用按钮 它将禁用 按钮 有效 如果我再次按下它 它将再次启用它 我尝试了 if else 之类的东西 但没有成功 这是一个例子 from tkinter import fenster Tk
  • 从 pandas DataFrame 中删除少于 K 个连续 NaN

    我正在处理时间序列数据 我在从数据帧列中删除小于或等于阈值的连续 NaN 时遇到问题 我尝试查看一些链接 例如 标识连续 NaN 出现的位置以及计数 Pandas NaN 孔的游程长度 https stackoverflow com que
  • 查找总和为给定数字的值组合的函数

    这个帖子查找提供的 Sum 值的组合 https stackoverflow com a 20194023 1561176呈现函数subsets with sum 它在数组中查找总和等于给定值的值的组合 但由于这个帖子已经有6年多了 我发这

随机推荐

  • stm32无法唤醒DTH11温湿度传感器解决

    关于DTH11的介绍和使用方法可以随便搜索一下别的文章 直接搜索DTH11即可 这里使用艾克姆科技的例程 却无法成功运行 上了示波器才发现拉低时间无法达到18ms 因此无法唤醒DTH11 总线由stm32拉低12ms左右之后就一直处于高电平
  • CString字符串查找和截取

    1 Find 该函数从左侧0索引开始 查找第一个出现的字符位置 CString str abc int postion str Find a 如果查到 返回以0索引起始的位置 未查到 返回 1 如果查到 返回以0索引起始的位置 未查到 返回
  • 卷积神经网络CNN小结(简单实现代码mnist数据集)

    由于全连接神经网络处理图像中的需要训练参数过多的问题 而卷积神经网络中 卷积层的神经元只与前一层的部分 神经元节点相连 既它的神经元的连接是非全连接的 且同一层某些神经元之间的连接的权重w和偏移b是共享的 这样大量减少了训练参数的数量 图1
  • 多线程事务怎么回滚?说用 @Transactional 可以回去等通知了!

    背景介绍 1 最近有一个大数据量插入的操作入库的业务场景 需要先做一些其他修改操作 然后在执行插入操作 由于插入数据可能会很多 用到多线程去拆分数据并行处理来提高响应时间 如果有一个线程执行失败 则全部回滚 2 在spring中可以使用 T
  • C++day4(关系运算符的重载)

    关系运算符重载的作用 可以让两个自定义类型对象进行对比操作 代码实现关系运算符的重载 include
  • unity工程崩溃资源找回

    1 Unity死机未保存场景 当你在Unity中编辑场景 突然死机时 可以在项目文件目录中找到Temp文件夹 双击文件夹 找到 Backupscenes文件夹 把后缀为 backup的文件后缀改为 unity 然后拖进Unity的Proje
  • 2021-05-03

    一 R中安装 phyloseq 的方法 很多网上的教程使用的都是 source https bioconductor org biocLite R biocLite phyloseq 但是我尝试了很多次 最后还是没有成功 下面能成功安装 p
  • 连接Mysql出现Connection unexpectedly closed

    Mysql 版本 5 7 问题 本地服务可以正常连接MySQL 在服务器部署后连接出错 服务器日志 dev miku r2dbc mysql client MySqlConnectionClosedException Connection
  • IDEA2021从零开始搭建SSM框架手把手详细教程 (一)

    开发环境 macos IDEA 2021 mysql8 0 toma9 0 源码 https download csdn net download a2267542848 19730797 1 基本环境搭建 1 新建工程 新建后整个目录如下
  • nodejs的安装与配置

    NodeJs安装与配置 之前一直在网上自己找教程装 但是经常出问题 索性自己总结一个 1 安装nodejs 去网址 https nodejs org zh cn download msi和 zip msi是Windows installer
  • 物联锁项目失败原因分析

    一 背景 2022年3月份接手IM024物联锁项目救火 此项目主要用于医院共享轮椅 共享病床 此项目是从2021年初开始立项开发 投入了大量的人力物力 但是在2022年3月份时产品工作仍然不稳定 此项目基本上可以判定为一个失败的典型 为了吸
  • 在linux下jdk安装和建立Hadoop集群的过程实验报告(搭建Hadoop集群)。

    1 模板虚拟机环境准备 相关视频 半小时快速搭建Hadoop集群 哔哩哔哩 bilibilihttps www bilibili com video BV1x5411177Y spm id from 333 880 my history p
  • (pinia-plugin-persistedstate)pinia 持久化存储

    背景 我们使用pinia的时候 会遇到页面刷新的时候数据丢失 我们自己解决的话 就是在页面刷新之前将数据存储到本地 然后在页面打开的时候将数据从本地读出来 实现数据持久化 所以我们可以通过插件来直接帮我们完成这个操作来实现自动化存储 学习p
  • Qt QTextEdit 自动滚动内容/移动光标到最后一行

    QTextEdit往文本后添加内容超出视图 并不会自动滚动到最后 需要添加以下代码 ui gt StatustextEdit gt insertPlainText text 光标后添加文本 ui gt StatustextEdit gt m
  • STM32项目--基于STM32的办公室安保(智能家居)系统设计

    基于嵌入式系统的办公室安保系统设计 简介 设计一套基于STM32的办公室安防系统 系统内部包括门禁系统 灾害报警系统 人脸识别系统和交互中心四个子系统 门禁系统 主要实现对门禁卡的存储和读取并识别已存储卡片的信息并控制开门 如读取卡片为未存
  • px_em_rem

    px em rem px px是固定的像素 一旦设置了就无法因为适应页面大小而改变 em和rem em和rem相对于px更具有灵活性 他们是相对长度单位 意思是长度不是定死了的 更适用于响应式布局 就是说当父元素大小发生变化 相应的字体大小
  • (2021)Top5 免费视频编辑软件,视频剪辑必备工具

    全球排名前5的免费视频剪辑软件 Top5 VideoPad https www nchsoftware com videopad 免费版 和 付费版 Top4 VSDC http www videosoftdev com 免费版 和 付费版
  • 集群环境下Redis分布式锁

    一 前言 在上一篇文章中 已经介绍了基于Redis实现分布式锁的正确姿势 但是上篇文章存在一定的缺陷 它加锁只作用在一个Redis节点上 如果通过sentinel保证高可用 如果master节点由于某些原因发生了主从切换 那么就会出现锁丢失
  • 【IMGUI】 各种辅助类 EditorGUIUtility、EditorUtility、GUIUtility、GUILayoutUtility

    EditorGUIUtility class in Editor 继承自 GUIUtility EditorGUI 的各种辅助程序 EditorGUIUtility currentViewWidth 我尝试打印了下这个值和position
  • 网页验证码破解、使用cookie登录

    十二周内容笔记 day34 01 芝麻代理作业 主要是练习了一下显式等待 写起来还是比较麻烦 但是还挺好用 from selenium import webdriver from selenium webdriver chrome serv