发表于 2020-5-14 10:13

申请会员ID:xcdapj1314【申请通过】

1、申 请 I D:xcdapj1314
2、个人邮箱:3407448242@qq.com
3、原创技术文章:分享python写yunfile自动化下载思路,希望在这里和各位大大前辈们学习交流


---> 使用python2.7+selenium+chrome v49+百度ocr识别
      因为yunfile每次下载都要等待10分钟,平时上班比较忙,老忘记时间,就百度搜了下怎么实现网页自动化,看到python可以实现,就从基础看起。这个python也是现学现用,各种百度和google,大概写了一周就把框架搭起来,经过完善,网络正常的话能跑好久不会出错。
yunfile大概思路是:
广告窗口需要关闭 --> 点击普通下载,获取验证码 --> 截图 -->处理图片获取验证码 -->百度ocr识别图片中的验证码 -->发送数字到验证码框中,点击进入下载-->广告关闭并下载

1、第一个阶段,关闭广告
用chrome打开网页后,现版本yunfile打开时有个广告,想关闭则需要进行元素定位,右键广告的右上角的X,选择 检查,发现是这个 <div class="ad-close-btn"></div> ,class_name元素+ad-close-btn来定位位置,然后点击click()


try:
      print (u'检测广告阶段')
      driver.find_element_by_class_name("ad-close-btn")
      driver.find_element_by_class_name("ad-close-btn").click()

2、第二个阶段,点击普通下载
关闭广告后,右键普通下载这个地方,选择检查,发现是<span class="down_span common_speed_down" id="common_speed_down">普通下载</span>,id元素+common_speed_down来定位位置,然后点击click()


try:
            driver.find_element_by_id("common_speed_down")
driver.find_element_by_id("common_speed_down").click()

3、第三个阶段,截图


#保存网页截图为当前程序所在目录的1.png
pic_path = r'.\1.png'
#截图
try:
      driver.save_screenshot(pic_path)

4、第四个阶段,处理整个网页的截图获取验证码图片
右键验证码图片,选择检查,发现是<img id="cvimg2" style="margin: -8px 15px -8px 4px;" src="/verifyimg/getPcv.html">,使用cvimg2来定位图片的上下左右位置,重新处理图片,保存为1.png

time.sleep(3)
      location = driver.find_element_by_id('cvimg2').location
      size = driver.find_element_by_id('cvimg2').size
      left = location['x']
      top = location['y']
      right = location['x'] + size['width']
      bottom = location['y']+ size['height']
      try:
            #从保存的截图中截取验证码,再次保存
            img = Image.open(pic_path).crop((left,top,right,bottom))
            img.save(pic_path)
      except:
            print (u'保存验证码图片失败')
            pass
#验证码获取后,重置验证码图片的上下左右信息
      left = ''
      top = ''
      right = ''
      bottom = ''
      time.sleep(2)

5、第五个阶段,百度ocr识别图片获取验证码数字
百度OCR部分

###################百度OCR识别#####################################
config = {
    'appId': '11111111',
    'apiKey': 'zzzzzzzzzz111111',
    'secretKey': 'vvvvvvvvvvvvvvvvvvvzzzzzzz'

}
#client = AipOcr(**config)
def get_file_content(file):
    try:
      with open(file,'rb') as fp:
            return fp.read()
    except:
      print ('dakai yanzhengma tupian fail')
def img_to_str(image_path):
    try:
      image = get_file_content(image_path)
      result = client.basicGeneral(image)
    except:
      print (u'百度不通')
      pass
    for i in result.get('words_result'):
      return (i.get('words'))

####################################################################

应用百度OCR,设置aaa来获取百度OCR返回的信息

1
aaa = img_to_str(pic_path)

6、第六个阶段,发送获取的数字到 验证码输入框中,点击下载
点击输入框,然后右键,检查,发现是<input name="vcode" id="vcode" type="text" maxlength="10" size="8" style="height:20px;margin-top:2px;width:85px;">,使用id和vcode来定位元素。清空当前输入框,发送数字到框中。点击下载,等待30秒

try:
            driver.find_element_by_id('vcode')
      except:
            pass
      else:
            code = driver.find_element_by_id('vcode')
            code.clear()
#发送aaa到框中

            code.send_keys(aaa)
            time.sleep(1)
#点击进入下载

            driver.find_element_by_id("slow_button").click()
            yanshi(30)
aaa = img_to_str(pic_path)
      print ('dakai yanzhengma tupian fail')
def img_to_str(image_path):
    try:
      image = get_file_content(image_path)
      result = client.basicGeneral(image)
    except:
      print (u'百度不通')
      pass
    for i in result.get('words_result'):
      return (i.get('words'))

####################################################################

7、第七个阶段,等待广告并关闭(此时和第一步一致),进行普通下载,下载文件
广告关闭此处省略,回看第一步,关闭广告后,右键普通用户下载,选择检查,发现是<span class="down_span spare_down" id="downbtn">普通用户下载</span>,使用用户id和downbtn元素定位,click()点击下载

try:
      driver.find_element_by_id("downbtn")
      time.sleep(1)
      driver.find_element_by_id("downbtn").click()


Hmily 发表于 2020-5-14 11:07

I D:xcdapj1314
邮箱:3407448242@qq.com

申请通过,欢迎光临吾爱破解论坛,期待吾爱破解有你更加精彩,ID和密码自己通过邮件密码找回功能修改,请即时登陆并修改密码!
登陆后请在一周内在此帖报道,否则将删除ID信息。

xcdapj1314 发表于 2020-5-14 13:43

来报到了   嘻嘻   
页: [1]
查看完整版本: 申请会员ID:xcdapj1314【申请通过】