Python实现获取网页内容及自动填表单与登录功能

这篇文章主要为大家详细介绍了如何利用Python实现模拟浏览器启动,获取网页内容、自动填表单、自动登录、自动过验证码等功能,需要的可以参考一下

  • 源码

  • 知识点补充

食用前准备

python 3.10.10 #二维码的库ddddocr 需要

  1. import time

  2. import ddddocr

源码​​​​​

  1. # import threading # 导入threading模块

  2. # from Feishu_SendMsg import *

  3. # Identification verification code

  4. import time

  5. import ddddocr

  6. interval = 100 * 60

  7. # def delayCall(): # 定义方法

  8. # SendMsg("选题 快快快!!!")

  9. # timer=threading.Timer(interval,delayCall) # 每秒运行

  10. # timer.start() # 执行方法

  11. # if __name__ == '__main__': #

  12. # t1=threading.Timer(interval,function=delayCall) # 创建定时器

  13. # t1.start() # 开始执行线程

  14. from selenium import webdriver

  15. from selenium.webdriver.common.by import By

  16. from selenium.webdriver.support.ui import WebDriverWait

  17. from selenium.webdriver.support import expected_conditions as EC

  18. from selenium.webdriver.common.keys import Keys

  19. # SendMsg("自动填表单")

  20. options = webdriver.ChromeOptions()

  21. options.add_argument('--enable-automation')

  22. options.add_argument('--no-sandbox')

  23. options.add_argument('--disable-extensions')

  24. options.add_argument('--start-maximized')

  25. options.add_argument('--disable-infobars')

  26. prefs = {"profile.default_content_setting_values.autocomplete_enabled": 2}

  27. options.add_experimental_option("prefs", prefs)

  28. # SendMsg("创建 Chrome 浏览器实例")

  29. # 创建 Chrome 浏览器实例

  30. browser = webdriver.Chrome(options=options)

  31. # SendMsg("打开网页")

  32. browser.get('www.tttttttt.com')

  33. # SendMsg("找到账号和密码框元素并输入指定字符串")

  34. username = browser.find_element("name","username")

  35. password = browser.find_element("name","userpass")

  36. usercode = browser.find_element("name","usercode")

  37. img_verifycode = browser.find_element("id","img_verifycode")

  38. # SendMsg("自动填充账号密码")

  39. username.send_keys("11111")

  40. password.send_keys("11111")

  41. verifycodeBase64 = img_verifycode.screenshot_as_base64

  42. ocr = ddddocr.DdddOcr()

  43. res = ocr.classification(verifycodeBase64)

  44. usercode.send_keys(res)

  45. # SendMsg(f"识别并填写验证码: {res}")

  46. # SendMsg("提交表单")

  47. password.send_keys(Keys.RETURN)

  48. # SendMsg("登陆: 提交表单")

知识点补充

下面为大家介绍一下文中用到的ddddocr库的相关使用吧

识别验证码的python 库有很多,用起来也并不简单,ddddocr (带带弟弟ocr)库是一个简单实用的识别验证码的库,推荐给大家

ddddocr具体使用方法

  1. import os

  2. import ddddocr

  3. from time import sleep

  4. from PIL import Image

  5. from selenium import webdriver

  6. from selenium.webdriver.common.by import By

  7. class GetVerificationCode:

  8. def __init__(self):

  9. self.res = None

  10. url = '要登录的地址'

  11. self.driver = webdriver.Chrome()

  12. self.driver.maximize_window() # 将浏览器最大化

  13. self.driver.get(url)

  14. # 获取验证码信息

  15. def getVerification(self):

  16. # 获取当前文件的位置、并获取保存截屏的位置

  17. current_location = os.path.dirname(__file__)

  18. screenshot_path = os.path.join(current_location, "..", "VerificationCode")

  19. # 截取当前网页并放到自定义目录下,并命名为printscreen,该截图中有我们需要的验证码

  20. sleep(1)

  21. self.driver.save_screenshot(screenshot_path + '//' + 'printscreen.png')

  22. sleep(1)

  23. # 定位验证码

  24. imgelement = self.driver.find_element(By.XPATH, '验证码图片的Xpath定位')

  25. # 获取验证码x,y轴坐标

  26. location = imgelement.location

  27. # 获取验证码的长宽

  28. size = imgelement.size

  29. # 写成我们需要截取的位置坐标

  30. rangle = (int(location['x'] + 430),

  31. int(location['y'] + 200),

  32. int(location['x'] + size['width'] + 530),

  33. int(location['y'] + size['height'] + 250))

  34. # 打开截图

  35. i = Image.open(screenshot_path + '//' + 'printscreen.png')

  36. # 使用Image的crop函数,从截图中再次截取我们需要的区域

  37. fimg = i.crop(rangle)

  38. fimg = fimg.convert('RGB')

  39. # 保存我们截下来的验证码图片,并读取验证码内容

  40. fimg.save(screenshot_path + '//' + 'code.png')

  41. ocr = ddddocr.DdddOcr()

  42. with open(screenshot_path + '//' + 'code.png', 'rb') as f:

  43. img_bytes = f.read()

  44. self.res = ocr.classification(img_bytes)

  45. print('识别出的验证码为:' + self.res)

  46. # 判断验证码错误时的提示信息是否存在

  47. def isElementPresent(self, by, value):

  48. try:

  49. element = self.driver.find_element(by=by, value=value)

  50. except NoSuchElementException:

  51. pass

  52. # 发生了NoSuchElementException异常,说明页面中未找到该元素,返回False

  53. return False

  54. else:

  55. # 没有发生异常,表示在页面中找到了该元素,返回True

  56. return True

  57. # 登录

  58. def login(self):

  59. self.getVerification()

  60. self.driver.find_element(By.XPATH, '用户名输入框Xpath定位').send_keys('用户名')

  61. self.driver.find_element(By.XPATH, '密码输入框Xpath定位').send_keys('密码')

  62. self.driver.find_element(By.XPATH, '验证码输入框Xpath定位').send_keys(self.res)

  63. sleep(1)

  64. self.driver.find_element(By.XPATH, '登录按钮Xpath定位').click()

  65. sleep(2)

  66. isFlag = True

  67. while isFlag:

  68. try:

  69. isPresent = self.isElementPresent(By.XPATH, '验证码错误时的提示信息Xpath定位')

  70. if isPresent is True:

  71. codeText = self.driver.find_element(By.XPATH, '验证码错误时的提示信息Xpath定位').text

  72. if codeText == "验证码不正确":

  73. self.getVerification()

  74. sleep(2)

  75. self.driver.find_element(By.XPATH, '验证码输入框Xpath定位').clear()

  76. sleep(1)

  77. self.driver.find_element(By.XPATH, '验证码输入框Xpath定位').send_keys(self.res)

  78. sleep(1)

  79. self.driver.find_element(By.XPATH, '登录按钮Xpath定位').click()

  80. sleep(2)

  81. tips = self.driver.find_element(By.XPATH,

  82. '未输入验证码时的提示信息Xpath定位').text

  83. if tips == "请输入验证码":

  84. self.getVerification()

  85. sleep(2)

  86. self.driver.find_element(By.XPATH, '验证码输入框Xpath定位').click()

  87. sleep(1)

  88. self.driver.find_element(By.XPATH, '验证码输入框Xpath定位').send_keys(self.res)

  89. sleep(1)

  90. self.driver.find_element(By.XPATH, '登录按钮Xpath定位').click()

  91. sleep(2)

  92. continue

  93. else:

  94. print("验证码正确,登录成功!")

  95. except NoSuchElementException:

  96. pass

  97. else:

  98. isFlag = False

  99. sleep(5)

  100. self.driver.quit()

  101. if __name__ == '__main__':

  102. GetVerificationCode().login()

识别结果

 到此这篇关于Python实现获取网页内容及自动填表单与登录功能的文章就介绍到这了,希望大家以后多多支持!

行动吧,在路上总比一直观望的要好,未来的你肯定会感 谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入扣群: 320231853,里面有各种软件测试+开发资料和技术可以一起交流学习哦。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

  • 28
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值