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

一、批量下载文件

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

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()

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

登陆页面模板

简单好看的登陆页面 vue项目代码 可忽略js部分 先来个效果图 <template><div class"login"><div class"content"><p >账户密码登录</p><div class"unit"><label class"label">用户名</…

非遗数字保护的崭新篇章:十八数藏柏松的文化守护

在数字时代&#xff0c;非遗数字保护崭新的篇章由十八数藏柏松书写。这个数字保护的使者不仅仅是文化的守护者&#xff0c;更是文化传承的崭新篇章的开创者。 首先&#xff0c;十八数藏柏松以数字技术作为媒介&#xff0c;将传统非物质文化遗产数字化&#xff0c;为其创造了一个…

Java字节码指令集概述及分类详解

Java全能学习面试指南&#xff1a;https://javaxiaobear.cn 1、字节码指令集与解析概述 Java字节码对于虚拟机&#xff0c;就好像汇编语言对于计算机&#xff0c;属于基本执行指令。 Java 虚拟机的指令由一个字节长度的、代表着某种特定操作含义的数字&#xff08;称为操作码&a…

Linux之实现简易的shell

1.打印提示符并获取命令行 我们在使用shell的时候&#xff0c;发现我们在输入命令是&#xff0c;前面会有&#xff1a;有用户名&#xff0c;版本&#xff0c;当前路径等信息&#xff0c;这里我们可以用环境变量去获取: 1 #include <stdio.h>2 #include <stdlib.h>…

检验LIS系统:医院信息管理的重要组成部分

检验LIS系统源码&#xff0c;云LIS系统源码 云LIS系统是医院信息管理的重要组成部分之一&#xff0c;集申请、采样、核收、计费、检验、审核、发布、质控、查询、耗材控制等检验科工作为一体的网络管理系统。LIS系统不仅是自动接收检验数据&#xff0c;打印检验报告&#xff0c…

因果发现31种高效经典方案汇总,附配套算法和代码

因果发现&#xff08;Causal Discovery&#xff09;是一个复杂的过程&#xff0c;其目标是从大量的数据中确定变量之间的因果关系。这个过程通常涉及到的是如何从纷繁复杂的数据中发现其中隐含的因果关系。有时&#xff0c;研究者可以通过随机实验进行干预来发现因果关系&#…

Windows Python3安装salt模块失败处理

复现CVE-2020-11651时候运行CVE-2020-11651的poc时候需要salt模块 在下载时出现了错误 尝试在网上寻找解决方法&#xff1a; 1.更新 setuptools 和 wheel pip install --upgrade setuptools wheel 2. 安装Microsoft Visual C 14.0 因为salt模块包包使用了 C/C 扩展&#x…

【速看】如何提高微信权重?影响微信权重的加分、扣分行为

微信具有一套权重判定系统&#xff0c;类似于搜索引擎的PR值&#xff0c;可以看做是一个“积分系统”。好的操作会增加积分&#xff0c;负面操作会减少积分。 当积分低于特定标准&#xff08;即底线&#xff09;时&#xff0c;将会被严重惩罚或封号。这样&#xff0c;微信确保了…

C# Onnx PP-Vehicle 车辆分析(包含:车辆检测,识别车型和车辆颜色)

目录 效果 模型信息 mot_ppyoloe_s_36e_ppvehicle.onnx vehicle_attribute_model.onnx 项目 代码 下载 其他 C# Onnx PP-Vehicle 车辆分析&#xff08;包含&#xff1a;车辆检测&#xff0c;识别车型和车辆颜色&#xff09; 效果 模型信息 mot_ppyoloe_s_36e_ppvehi…

代码随想录算法训练营Day 59 || 503.下一个更大元素II、42. 接雨水

503.下一个更大元素II 力扣题目链接(opens new window) 给定一个循环数组&#xff08;最后一个元素的下一个元素是数组的第一个元素&#xff09;&#xff0c;输出每个元素的下一个更大元素。数字 x 的下一个更大的元素是按数组遍历顺序&#xff0c;这个数字之后的第一个比它更…

docker 安装常用环境

一、 安装linux&#xff08;完整&#xff09; 目前为止docker hub 还是被封着&#xff0c;用阿里云、腾讯云镜像找一找版本直接查就行 默认使用latest最新版 #:latest 可以不写 docker pull centos:latest # 拉取后查看 images docker images #给镜像设置标签 # docker tag […

某基金公司赵哥“逆袭”了!!!

赵哥&#xff0c;在上海一家基金公司做运维主管。 平时工作的首要任务&#xff0c;就是保障公司各项信息系统的安全运行。 万一系统运行中出现了一些重要问题&#xff0c;他还要负责进行调查、记录与汇报... 总之&#xff0c;责任很重&#xff0c;该说不说&#xff0c;搞不好…

10.分组循环练习题

分组循环 https://leetcode.cn/problems/longest-even-odd-subarray-with-threshold/solutions/2528771/jiao-ni-yi-ci-xing-ba-dai-ma-xie-dui-on-zuspx/?envTypedaily-question&envId2023-11-16 分组循环 适用场景&#xff1a; 按照题目要求&#xff0c;数组会被分割成若…

大型养殖场需要哪些污水处理设备

大型养殖场是一个涉及环境保护和可持续发展的关键行业&#xff0c;对于处理养殖场产生的污水有着明确的要求和标准。为了确保污水得到有效处理和处理效果达到国家排放标准&#xff0c;大型养殖场需要配备一系列污水处理设备。以下是几种常见的污水处理设备&#xff1a; 1. 水解…

厦门市委常委、常务副市长黄晓舟调研极狐(GitLab)

11 月 22 日&#xff0c;厦门市委常委、常务副市长黄晓舟&#xff0c;厦门市工信局副局长许文恭&#xff0c;厦门市高新技术创业中心有限公司董事长邸国栋等一行人员莅临极狐(GitLab)进行参观调研&#xff0c;深入了解极狐(GitLab)的发展情况。 黄晓舟副市长&#xff08;左&…

TikTok历史探秘:短视频中的时间之旅

在数字时代的浪潮中&#xff0c;TikTok崭露头角&#xff0c;成为社交媒体领域的一颗耀眼新星。这款短视频应用以其独特的创意、时尚和娱乐性质&#xff0c;吸引了全球数以亿计的用户。 然而&#xff0c;TikTok并非一夜之间的奇迹&#xff0c;它背后蕴藏着丰富而有趣的历史故事…

解决ElementUI时间选择器回显出现Wed..2013..中国标准时间.

使用饿了么组件 时间日期选择框回显到页面为啥是这样的&#xff1f; 为什么再时间框中选择日期&#xff0c;回显页面出现了这种英文格式呢&#xff1f;&#xff1f;&#xff1f;&#xff1f; 其实这个问题直接使用elementui的内置属性就能解决 DateTimePicker 日期时间选择…

qs-一个序列化和反序列化的JavaScript库

起因 一个业务场景中&#xff0c;最终得到一串字符"status[0]value1&status[1]value2" 通过解析&#xff0c;理应得到一个数组&#xff0c;却得到一个对象 于是展开问题排查 最终发现是qs.parse 这个地方出了问题 排查结果 qs解析这种带下标的字符串时&#xff…

内网穿透隐秘隧道搭建

别低头&#xff0c;皇冠会掉&#xff1b;别流泪&#xff0c;贱人会笑。 本文首发于先知社区&#xff0c;原创作者即是本人 0x00 前言 构建内网隐蔽通道&#xff0c;从而突破各种安全策略限制&#xff0c;实现对目标服务器的完美控制。 当我们从外网成功获得攻击点的时候&…

实时截留抖音询价的用户:10个合规方法,让你的业务迅速增长!

先来看实操成果&#xff0c;↑↑需要的同学可看我名字↖↖↖↖↖&#xff0c;或评论888无偿分享 一、引言 随着抖音的普及度越来越高&#xff0c;越来越多的商家开始关注抖音询价用户。这些潜在客户对于企业的发展至关重要&#xff0c;如何实时截留这些用户成为商家关注的重点…