selenium 简单案例 <批量下载文件> <网页自动化点击上报>

news2024/11/17 7:17:08

一、批量下载文件

网页分析
在这里插入图片描述
点击跳转到下载页面
在这里插入图片描述

from selenium import webdriver
import time


def get_link_list():
    # 创建浏览器对象
    driver = webdriver.Chrome(
        executable_path=r'C:\Users\nlp_1\Desktop\chromedriver\chromedriver-win32\chromedriver.exe')
    url = 'https://www.tendacn.com/en/service/download-cata-11.html'
    driver.get(url)
    # 等待
    driver.implicitly_wait(10)
    css_elem = driver.find_elements_by_css_selector('.dr_file > a')
    link_list = []
    for link in css_elem:
        page_link = link.get_attribute('href')
        print(page_link)
        link_list.append(page_link)

    driver.close()
    driver.quit()
    return link_list

def get_download_links(link_list):
    download_link_list = []
    for i,link in enumerate(link_list):
        if i == 0:
            driver = webdriver.Chrome(
        executable_path=r'C:\Users\nlp_1\Desktop\chromedriver\chromedriver-win32\chromedriver.exe')
            driver.get(link)
        else:
            js = f'window.open("{link}")'
            driver.execute_script(js)
            # 每打开一个链接切换到该页面也就是最新的这个
            driver.switch_to.window(driver.window_handles[-1])
        download_elem = driver.find_element_by_css_selector('.downbtns > a')
        download_link = download_elem.get_attribute('href')
        download_link_list.append(download_link)
    totals = len(download_link_list)
    print(f'一共有{totals}个下载链接!')

    driver.quit()
    return download_link_list


def download_file(download_link_List):
    for i,doanload_link in enumerate(download_link_List):
        js = f'window.open("{doanload_link}")'
        driver.execute_script(js)
        print(30*'-')
        print(doanload_link)
        time.sleep(6)
        print(f'第{i + 1}个文件正在下载中……')


# 程序执行入口
if __name__ == '__main__':
    link_list = get_link_list()
    download_link_List = get_download_links(link_list)

    options = webdriver.ChromeOptions()
    options.add_argument('--ignore-certificate-errors')
    driver = webdriver.Chrome(options=options)

    download_file(download_link_List)

二、网页自动化点击上报

在这里插入图片描述

在这里插入图片描述

# 指定账户名和密码登录
def login():
    # 随机点一下 ,以便显示登录页面
    driver.find_element_by_id('bodyMain').click()
    # id=“username”是打开的网址中,账号登录的输入框,输入字符串“用户名”
    username = input('请输入你的用户名:')
    password = input('请输入你的密码:')
    print('登录中……')
    driver.find_element_by_id('username').send_keys(username)
    driver.find_element_by_id('password').send_keys(password)
    # id="submit"是点击登录, click() 是模拟点击
    driver.find_element_by_id("submit").click()
    time.sleep(2)
    print('登录成功\n')

在这里插入图片描述

# 点击 风险分级管控
    driver.implicitly_wait(5)
    risk_grade_control = driver.find_element_by_link_text("风险分级管控")
    risk_grade_control.click()
    time.sleep(2)
    print('已点击【风险分级管】\n')

在这里插入图片描述

# 点击 风险点隐患上报
    driver.implicitly_wait(5)
    xpth = driver.find_element_by_xpath("//div[@data-tid='e9c7735c77284173a243f8e47999ee8d']")
    xpth.click()
    time.sleep(2)
    print('已点击【风险点隐患上报】\n')

在这里插入图片描述

注意:可能点击 “风险点隐患上报” 右边页面是异步加载的找不到对应的文本按钮

    # 重定向页面,确保操作的是当前窗口页面内容
    driver.switch_to.default_content()
    frame = driver.find_elements_by_tag_name('iframe')[0]
    driver.switch_to.frame(frame)
    time.sleep(1)

完整代码

# 导入相关库和模块
from selenium import webdriver
import time


# 指定账户名和密码登录
def login():
    # 随机点一下 ,以便显示登录页面
    driver.find_element_by_id('bodyMain').click()
    # id=“username”是打开的网址中,账号登录的输入框,输入字符串“用户名”
    username = input('请输入你的用户名:')
    password = input('请输入你的密码:')
    print('登录中……')
    driver.find_element_by_id('username').send_keys(username)
    driver.find_element_by_id('password').send_keys(password)
    # id="submit"是点击登录, click() 是模拟点击
    driver.find_element_by_id("submit").click()
    time.sleep(2)
    print('登录成功\n')


# 免输入密码和账户名登录
def vip_login():
    # 苏州五合汽车部件制造有限公司
    # 张家港市友成高新材料有限公司
    print('这是vip直接登录模式(免输户名和密码),登录中……')
    driver.find_element_by_id('bodyMain').click()
    driver.find_element_by_id('username').send_keys('苏州五合汽车部件制造有限公司')
    driver.find_element_by_id('password').send_keys('ghj@18zXX')
    driver.find_element_by_id("submit").click()
    time.sleep(2)
    print('vip免输入模式,登录成功!\n')


# 到达要处理的页面
def to_page():
    # 点击 风险分级管控
    driver.implicitly_wait(5)
    risk_grade_control = driver.find_element_by_link_text("风险分级管控")
    risk_grade_control.click()
    time.sleep(2)
    print('已点击【风险分级管】\n')

    # 点击 风险点隐患上报
    driver.implicitly_wait(5)
    xpth = driver.find_element_by_xpath("//div[@data-tid='e9c7735c77284173a243f8e47999ee8d']")
    xpth.click()
    time.sleep(2)
    print('已点击【风险点隐患上报】\n')

    # 重定向页面,确保操作的是当前窗口页面内容
    driver.switch_to.default_content()
    frame = driver.find_elements_by_tag_name('iframe')[0]
    driver.switch_to.frame(frame)
    time.sleep(1)


# 点击 无隐患,处理一个页面
def deal_one_page(index=0):
    time.sleep(2)
    print()
    print(30 * '-')
    print()
    for i in range(20):
        if index == totals // 20 and i == totals % 20:
            print(f'总共{20 * index + i}条,已经全部点击完成!')
            driver.close()
            break
        print(f'第{20 * index + i + 1}条开始点击处理……')
        if i == 0:
            driver.find_elements_by_partial_link_text('无隐患')[i].click()

        driver.find_elements_by_partial_link_text('无隐患')[i].click()

        print('等待弹窗出现,并准备点击【确定】……')
        time.sleep(2)

        try:
            driver.implicitly_wait(5)  # seconds
            elem_yes = driver.find_element_by_partial_link_text('确定')
            elem_yes.click()
        except:
            print('稍等,正在处理……')  # 再次重点击‘无隐患’
            driver.find_elements_by_partial_link_text('无隐患')[i].click()
            time.sleep(3)  # 之前5秒合适
            driver.implicitly_wait(5)  # seconds
            elem_yes = driver.find_element_by_partial_link_text('确定')
            elem_yes.click()

        print('已经点击【确定】,弹窗正在退出……')

        print(f'第{20 * index + i + 1}条无隐患已经上报!')
        print()
        print(30 * '-')
        print()
        time.sleep(1)


# 点击 无隐患,翻页并处理全部页面
def deal_all_page(totals):
    for index in range(totals // 20 + 1):
        time.sleep(3)
        deal_one_page(index)
        print()
        print(f'-----第{index + 1}页已经完成-----')
        print(f'--------------------------------')
        print()
        try:
            driver.find_element_by_id('mini-25').click()
        except:
            driver.find_element_by_id('mini-25').click()
        time.sleep(2)


def get_totals():
    driver.implicitly_wait(10)  # seconds
    driver.find_element_by_id('mini-26').click()

    driver.implicitly_wait(10)
    end_page_elem = driver.find_elements_by_xpath(".//span[@class='mini-pager-index']/span")[0]
    end_page = end_page_elem.text.strip('/')

    time.sleep(3)

    end_page_count = driver.find_elements_by_partial_link_text('无隐患')
    totals = (int(end_page) - 1) * 20 + len(end_page_count)
    print(f'一共{totals}条记录待点击处理')

    driver.implicitly_wait(10)  # seconds
    driver.find_element_by_id('mini-23').click()
    time.sleep(3)
    return totals


def main():
    # vip_login()
    login()
    to_page()
    time.sleep(3)

    global totals
    totals = get_totals()

    deal_all_page(totals)


if __name__ == "__main__":
    totals = None
    # 调用环境变量指定的 Chrome 浏览器创建浏览器对象
    driver = webdriver.Chrome()
    # get 方法会一直等到页面被完全加载,然后才会继续程序,通常测试会在这里选择
    print('正在启动网页自动化办公程序……\n')
    time.sleep(2)
    driver.get("http://221.224.155.68:9090/cas/login?service=http%3A%2F%2F221.224.155.68%3A9090%2Flesweb3%2F")
    print('正在打开目标网站……\n')
    time.sleep(2)
    main()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1242477.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vscode提交代码到Gitee(保姆教程)

Visual Studio Code(VSCode) 提交代码到Gitee(保姆教程) 1 环境配置1.1 git本地安装1.2 Vscode安装1.3 配置注册gitee账号 2 Vscode代码提交到Gitee2.1 新建仓库2.2 Vscode提交代码 1 环境配置 电脑需要已经安装好的Vscode已经配…

交直流一体化电源系统测试步骤详解

交直流一体化电源拥有高度适应性,可以用于不同的电力需求领域。但是为了确保其质量和性能,需要对交直流一体化电源进行各项测试以保证正常工作。本文纳米软件将介绍交直流一体化电源的测试方法,以及如何用交直流一体化电源测试系统进行测试。…

Mapbox中点图层和面图层点击事件重叠,禁止点击穿透方案

使用mapbox的小伙伴们可能都遇到过这个问题,就是当地图上有两个图层,一个面图层一个点图层,二者相重合的时候。假设我们想点击点位弹窗展示一些内容,也想点击面图层的时候弹窗展示一些内容,这时候一个有意思的问题就产生了,就是点击点位弹窗的时候面图层对应的弹窗也会弹…

羊大师详解羊奶如何帮助控制血压

羊大师详解羊奶如何帮助控制血压 羊奶是一种珍贵的天然饮品,不仅具有丰富的营养成分,还被证实对血压具有调控作用。很多人在了解到羊奶的功效后,都对其与血压之间的关系产生了浓厚的兴趣。接下来,小编羊大师将为大家详细介绍羊奶…

如何通过类似于Android adb install apk 命令安装三方Harmony Hap包

安装命令 hdc install xxx.hapOpenHarmony设备安装Hap应用的五种方式 https://www.51cto.com/article/762223.htmlhttps://www.51cto.com/article/762223.html DevEco Studio 3.1为例新建个项目,点击File->Project Structure 进入签名页面然后点击Sign in登录华…

Docker | Docker入门安装

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏:Docker系列 ✨特色专栏: My…

使用Pytorch从零开始构建Transformer

在本教程中,我们将使用 PyTorch 从头开始​​构建一个基本的 Transformer 模型。Vaswani 等人提出的 Transformer 模型。在论文“Attention is All You Need”中,是一种专为序列到序列任务(例如机器翻译和文本摘要)而设计的深度学…

C++算法入门练习——相同的二叉查找树

将第一组n​个互不相同的正整数先后插入到一棵空的二叉查找树中,得到二叉查找树T1​;再将第二组n个互不相同的正整数先后插入到一棵空的二叉查找树中,得到二叉查找树T2​。判断T1​和T2​​是否是同一棵二叉查找树。 二叉查找(搜索)树定义&am…

python变量、常量、数据类型

一、变量 变量是存储在内存中的值,这就意味着在创建变量时会在内存中开辟一个空间。 基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中。 因此,变量可以指定不同的数据类型,这些变量可以…

Delphi 12 Athens 发布了!

官方安装包 ☞ https://altd.embarcadero.com/download/radstudio/12.0/RADStudio_12_0_4915718.iso 安装辅助工具、控件可以戳这里 :Delphi 12 资源 RAD Stuido 12 Athens ,这次更新的细节还是比较多的,但主要还是多端(iOS、An…

来聊聊JVM中的类加载过程以及双亲委派模型(学习Java必知内容)

文章目录 1. 类加载过程加载验证准备解析初始化 2. 双亲委派模型一个类的加载流程双亲委派模型的优点 总结 1. 类加载过程 在整个 JVM 执行过程中, 和我们程序员关系最密切的就是类加载的过程, 所以接下来我们来看下类加载的执行流程. 对于一个类来说, 它的生命周期是这样的:…

盘点63个Python登录第三方源码Python爱好者不容错过

盘点63个Python登录第三方源码Python爱好者不容错过 学习知识费力气,收集整理更不易。 知识付费甚欢喜,为咱码农谋福利。 链接:https://pan.baidu.com/s/1l7oooH9YovHmWzQ_58FRdg?pwd8888 提取码:8888 项目名称 A headless…

安卓手机好用的清单软件有哪些?

生活中每个人都有丢三落四的习惯,伴随着生活节奏的加快,人们常忘事的情况会更加频繁的出现,这时候很多人就开始选择手机上记录清单类的软件,安卓手机在手机市场中占有很大的分量,在安卓手机上好用的记录清单的软件有哪…

1688商品详情数据接口(1688.item_get)

1688商品详情数据接口是一种程序化的接口,通过这个接口,商家或开发者可以使用自己的编程技能,对1688平台上的商品信息进行查询、获取和更新。这个接口允许商家根据自身的需求,获取商品的详细信息,例如价格、库存、描述…

没有PDF密码,如何解密?

PDF文件有两种密码,一个打开密码、一个限制编辑密码,因为PDF文件设置了密码,那么打开、编辑PDF文件就会受到限制。忘记了PDF密码该如何解密? PDF和office一样,可以对文件进行加密,但是没有提供恢复密码的功…

SQLite3 数据库学习(五):Qt 数据库高级操作

参考引用 SQLite 权威指南&#xff08;第二版&#xff09;SQLite3 入门 1. Qt 数据库密码加密 MD5 加密在线工具 1.1 加密流程 加密后的密码都是不可逆的 1.2 代码实现 loginsqlite.h #ifndef LOGINSQLITE_H #define LOGINSQLITE_H#include <QWidget> #include <Q…

第15届蓝桥杯Scratch选拔赛中级(STEMA)真题2023年10月

一、单选题 1.运行以下哪个程序后&#xff0c;巨嘴鸟会向下移动&#xff1f;&#xff08; &#xff09; A. B. C. D. 2.运行以下程序后&#xff0c; 能看到几只河豚鱼&#xff08; &#xff09;&#xff1f; A.3 B.4 C.6 D.7 3.以下运算结果为“False”的是&#xff08…

Python教程73:Pandas中一维数组Series学习

创建一维数据类型Series dataNone 要转化为Series的数据(也可用dict直接设置行索引) 若是标量则必须设置索引,该值会重复,来匹配索引的长度 indexNone 设置行索引 dtypeNone 设置数据类型(使用numpy数据类型) nameNone 设置Series的name属性 copyFalse 不复制 (当data为ndarray…

常用服务注册中心与发现(Eurake、zookeeper、Nacos)笔记(一)基础概念

基础概念 注册中心 在服务治理框架中&#xff0c;通常都会构建一个注册中心&#xff0c;每个服务单元向注册中心登记自己提供的服务&#xff0c;将主机与端口号、版本号、通信协议等一些附加信息告知注册中心&#xff0c;注册中心按照服务名分类组织服务清单&#xff0c;服务…

群晖NAS搭建WebDav服务做文件共享,可随时随地远程访问

文章目录 1. 在群晖套件中心安装WebDav Server套件1.1 安装完成后&#xff0c;启动webdav服务&#xff0c;并勾选HTTP复选框 2. 局域网测试WebDav服务2.1 下载RaiDrive客户端2.2 打开RaiDrive&#xff0c;设置界面语言可以选择中文2.3 点击添加按钮&#xff0c;新建虚拟驱动区2…