一、前言
室友的家长喜欢收集纪念币,纪念币是需要预约的,而且每个人同一种货币只能预约一份,如果想要给很多人预约,恐怕要一个一个点,因此,我突然回想起曾经接触过的一个知识——selenium,曾经的回忆涌上心头。
二、材料准备
1、电脑一台(带有pycharm软件)
2、Edge浏览器驱动(对应自己的浏览器版本)
3、验证码识别工具
4、屏幕前的吴彦祖一位
三、材料说明
1、Edge浏览器驱动
驱动下载地址:Microsoft Edge WebDriver | Microsoft Edge Developer
根据自己电脑的操作系统版本或浏览器版本选择对应的驱动版本。
下载完成后,将浏览器驱动放在你的Python当前工程根目录下
2、验证码识别工具
众所周知,有些网站在输入完账号信息后需要输入验证码才可以登录,这个验证码识别工具就可以解决这个问题,我使用的是http://ttshitu.com/这家的工具,需要花好像是1元钱可以识别1000次,用起来很不错,购买后,进入这家的用户文档http://www.ttshitu.com/docs/index.html?spm=null找到自己使用的语言,怎样使用人家都会说明清楚。
四、软件代码
这里我演示用的是https://www.gushiwen.cn/古诗文网
import time
import base64
import json
import requests
from selenium import webdriver
from selenium.webdriver.common.by import By
li = 0
email_list = ['1233211232@qq.com', "1111111111@qq.com", "1234567891@qq.com", "9876543219@qq.com"] # 邮箱库(假的)
code_list = [123456,654321,777777,555555] # 密码库(假的)
def base64_api(uname, pwd, img, typeid):
with open(img, 'rb') as f:
base64_data = base64.b64encode(f.read())
b64 = base64_data.decode()
data = {"username": uname, "password": pwd, "typeid": typeid, "image": b64}
result = json.loads(requests.post("http://api.ttshitu.com/predict", json=data).text)
if result['success']:
return result["data"]["result"]
else:
return result["message"]
return ""
def send_web():
option = webdriver.EdgeOptions()
option.add_experimental_option("detach", True) # 防止浏览器自己关闭
global driver # 声明为全局
driver = webdriver.Edge(options=option)# 防止浏览器自己关闭
driver.get('https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx') # 登录页面网站
def write():
for li in range(len(email_list)):
send_web() # 对登录页面发起请求
time.sleep(2)
email = driver.find_element(By.XPATH, '//*[@id="email"]')
email.send_keys(email_list[li]) # 填入邮箱账号
time.sleep(2)
pwd = driver.find_element(By.XPATH, '//*[@id="pwd"]')
pwd.send_keys(code_list[li]) # 填入密码
time.sleep(2)
code = driver.find_element(By.XPATH, '//*[@id="imgCode"]').screenshot('code.png') # 截取目标验证码图片到项目根目录
img_path = "D:/Pycharm_Project/pythonProject_selenium/code.png" # 截取的验证码地址(这里填自己的,这个是我的)(不要有中文路径)
result = base64_api(uname='填自己的', pwd='填自己的', img=img_path, typeid=3) # typeid是验证码格式,目标验证码格式根据所需填写(这里是英数组合)
code = driver.find_element(By.XPATH, '//*[@id="code"]')
code.send_keys(result) # 填入验证码
time.sleep(2)
li += 1 # 填写下一个人的
driver.quit() # 关闭浏览器
if __name__ == "__main__":
write()
(1)这里身份信息库和密码库根据自己实际情况填写
(2)用户名(uname)和密码(pwd)填自己在图片识别官网上注册的
(3)这里我在填写完验证码后两秒后直接关闭浏览器了,没有写登录的点击代码,因为只是示范作用,所以不要认为是BUG啊。
(4)用户账户密码库自行处置,我所提供的都是假的
(5)selenium库我用的是4.15.2版本
(6)思路给大家介绍到这里。
五、总结
selenium最常见是的谷歌浏览器的使用,但是也有很多人和我一样对Edge浏览器情有独钟,但是往上有关的selenium相关的介绍要么就是年代久远,要么就是少的可怜,当时最让我头疼的就是使用selenium打开浏览器浏览器会自动关闭,最终花了一下午才解决问题,写下此文,用以重新唤醒未来的我。