一、验证码问题
1.1 验证码出现位置
-
登录界面
登录界面没有验证码(特别网站),只有输错了多次情况下才会出现,只要输入一次,又很少出现了。
-
查询数据的时候,查询按钮之前要输入。
-
当我们爬一个网站,爬到一般出现验证码-----以滑动验证码居多
1.2 验证码分类
-
图片验证码–普通验证码
知网图片验证码:http://my.cnki.net/elibregister/CheckCode.aspx -
滑动验证码–验证码高级
-
反人类验证码–难以分辨的验证码
二、selenium手动打码
对于任何的验证码我们都可以使用selenium手动输入。
发票检验 URL:https://inv-veri.chinatax.gov.cn/
selenium使用ie浏览器:
import time
from selenium.webdriver.common.keys import Keys
def verify_fp():
from selenium import webdriver
# 创建浏览器驱动
driver = webdriver.Ie()
# 请求url
driver.get('https://inv-veri.chinatax.gov.cn/')
# 等待
# driver.implicitly_wait(20)
time.sleep(5)
# 添加发票代码
driver.find_element_by_xpath('//*[@id="fpdm"]').send_keys('044031900211')
driver.find_element_by_xpath('//*[@id="fphm"]').send_keys('28780009')
driver.find_element_by_xpath('//*[@id="kprq"]').send_keys('20200417')
driver.find_element_by_xpath('//*[@id="kjje"]').send_keys('227437')
# driver.find_element_by_xpath('//*[@id="yzm_img"]').click()
while True:
# 清空输入款
driver.find_element_by_xpath('//*[@id="yzm"]').send_keys(Keys.CONTROL,'a') # 全选
driver.find_element_by_xpath('//*[@id="yzm"]').send_keys(Keys.CONTROL,'x') # 剪切
code = input('输入验证码:')
driver.find_element_by_xpath('//*[@id="yzm"]').send_keys(code)
time.sleep(5)
driver.find_element_by_xpath('//*[@id="checkfp"]').click()
time.sleep(5)
if '3999.0' in driver.page_source:
print('发票为真!')
break
print('验证码错误,冲输入!')
if __name__ == '__main__':
verify_fp()