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实现获取网页内容及自动填表单与登录功能的文章就介绍到这了,希望大家以后多多支持!

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

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值