Python Selenium Web自动化初级食用体验(爬数据)

lcvy 2021-8-27

2277 0

前言

在某网站上买了个会员,构造简单,除扫描二维码微信登录以及账号密码外无其他验证方式,同时可以开个人发票避免被提前终止服务,最后查看网站款项无明显相关机器人操作免责声明。(为避免被请喝茶,请使用高级食用方法的各位注意请求力度)

分析

某网站基于vue框架而写,跨域请求,动态加载,页面有类似焦点设置控制事务。(半路出家写实际代码,对这块理论知识不牢靠。)

代码思路

确定基础逻辑思路

网站中需要选择对应分类后,选择对应目录,最后在对应目录下点击文件获取文件url并写在文本中,同时关闭请求的文件页。

进入分类选择页 → 进入目录选择页 → 进入文件选择页 → 点击文件获取 → 关闭请求文件

一共需要十种变量三种动作,代码嵌套while循环前均需初始化。

参数:

driver(Webdrive.Chrome()对象)

k(类型的参数)

PageFolderNow(目录当前页)

PageFolderMax(目录最大页)

FolderNow(本页目录当前所在行数)

FolderMax(本业目录最大行数)

PageFileNow(文件当前页)

PageFileMax(文件最大页)

FileNow(本业文件当前所在行数)

FileMax(本业文件最大行数)

动作:

get() ##获取PageFolderNow等参数信息

click() ##点击对应位置

memory() ##打开txt文件并记录信息

发现问题

  1. 网络环境不稳定,导致需要找的元素不被加载或延迟加载;(网站无相关懒加载设置)
  2. 请求会被中断从而导致代码执行中断;
  3. 窗口句柄选择逻辑错误;
  4. 页数选择逻辑错误;
  5. txt编码方式错误。(实际仅使用utf-8,实际上考虑特殊符号当时设置成utf-16)

优化代码

  1. 使用while嵌套try,except提高可用性;
  2. 设置页面刷新动作[refresh()]作为except的下一步操作。

示例代码

def GetFloderMax(driver,k,p1,p2,FolderNow):
    b = 0
    while b == 0:
        try:
            FloderMax = 0
            time.sleep(1)
            sentry_1 = driver.find_element_by_xpath(
                "/html/body/div[1]/div/div[2]/div[2]/div[2]/div[3]/div[1]"
            ).find_elements_by_class_name("*******")
            time.sleep(1)
            for sentry_2 in sentry_1:
                FloderMax = FloderMax + 1
            b = 1
        except:
            refresh.refreshFolder(driver,k,p1,p2,FolderNow)

尾巴

代码通过晚上网络环境相对良好的环境下进行6小时的测试,可正确运行,但代码仍存在几种问题。

  1. 无好的代码习惯,代码复用性几乎不存在;
  2. 仍不清楚点击文件的动作所提交的是什么,无法探究非打开实际窗口的POST提交是否有效;
  3. 代码全部使用的是time.sleep()选择等待元素时间,无动态等待;
  4. 相关js代码嵌入以及鼠标动作没有在本代码中被应用。

附上python脚本代码

import os
class open:
    list_1 = os.listdir("./update/")
    for i in list_1:
        list_2 = os.listdir("./update/"+i)
        for j in list_2:
            list_3 = os.listdir("./update/"+j)
            for k in list_3:
                os.system('aria2c --max-concurrent-downloads=1 --input-file=url.txt')

代码爬的资源是这个:https://bbs.1ove.club/thread-5216.htm 代码贴附件上,没好的代码习惯,要优化的自行解决~

最后于 2021-8-27 被lcvy编辑 ,原因:
上传的附件:
这家伙太懒了,什么也没留下。
最新回复 (0)
    • YiOVE论坛
      2
         
返回