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

一、批量下载文件

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

from selenium import webdriver
import timedef 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_listdef 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_listdef 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()breakprint(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)  # secondselem_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)  # secondselem_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)  # secondsdriver.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)  # secondsdriver.find_element_by_id('mini-23').click()time.sleep(3)return totalsdef main():# vip_login()login()to_page()time.sleep(3)global totalstotals = 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.mzph.cn/news/163461.shtml

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

相关文章

微信报名怎么做_轻松便捷的数字化报名体验

微信报名:轻松便捷的数字化报名体验 在这个数字化时代,微信已经成为我们生活中不可或缺的一部分。它不仅仅是一个社交平台,更是一个功能强大的综合性工具。其中,微信报名功能更是给我们的生活带来了极大的便利。本文将详细介绍微…

Django之cookie和session

文章目录 Cookie的介绍Cookie的由来什么是CookieCookie原理Cookie覆盖浏览器查看Cookie 在Django中操作Cookie设置Cookie查询浏览器携带的Cookie删除Cookie Cookie校验登录sessionSession的由来Session设置查看、更新Session值删除Session值Seesion的其他方法Session的其他配置…

扩展外部eMMC存储

By Toradex胡珊逢 简介 存储器的嵌入式设备中扮演着重要角色,上面不仅安装有操作系统,同时也保存着应用程序和运行日志等。对于存储器如 eMMC,写入的数据量决定其使用寿命,对于有大量日志记录的应用,通常可以选用一个…

cefsharp119.4.30(cef119.4.3,Chromium119.0.6045.159)版本升级体验支持H264及其他多个H264版本

Cefsharp119.4.30,cef119.4.3,Chromium119.0.6045.159 此更新包括一个高优先级安全更新 This update includes a high priority security update. 说明:此版本119.4.3支持H264视频播放(需要联系我),其他版本。.NETFramework 4.6.2 NuGet Gallery | CefSharp.WinForms 119.…

运动规划Motion-Planning随笔

online verification技术 实时安全校验技术:留一手 首先计算能否通过刹车这种方式得到一条安全轨迹,(让速不让道),当刹车有可能碰撞到行人或其他车辆时,则判断变道是否会产生碰撞。如果能变道&#xff0…

「 系统设计 」 为什么要做架构分层?

「 系统设计 」 为什么要做架构分层? 参考&鸣谢 3.设计模式之分层思维:为什么要做代码分层架构? 从零开始学架构(八)分层架构和设计模式 架构模式之分层架构总结 文章目录 「 系统设计 」 为什么要做架构分层&…

IT支持团队的绩效指标和最佳实践

一名员工在远程时因笔记本问题寻求IT支持,尽管他们多次尝试排除故障,但由于缺乏专业知识,最终还是无法访问工作所需的应用程序。这时,他们需要一名专业的 IT 技术人员来指导他们,但他们只能等待有人注意到并回应他们的…

海报设计必备:揭秘5款炙手可热的设计工具

1.即时设计:能实现在线协作的海报设计软件 即时设计作为 2020 年上线的国产设计工具,目前已经有了超百万的注册用户,获得了广大设计师的一致好评。与其他传统海报设计软件相比,即时设计具有这几个优点:一是所有功能都…

Chrome 访问不了项目?10080端口 ERR_UNSAFE_PORT:问题原因 / 解决方案

文章目录 被禁用端口列表解决方法方法一、更换端口 / 使用代理 / 使用域名方法二、对浏览器下手WindowsMac 最近有客户反馈,在chrome浏览器中访问不了项目,其他浏览器都是正常的。 ?奇了怪了,难道客户对chrome做了什么操作&#x…

Docker | Docker入门安装

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

探索WebStorm 2023 Mac/win:最强大的JavaScript开发工具

在当今的软件开发领域,JavaScript已经成为了一种不可或缺的编程语言。而在众多的JavaScript开发工具中,WebStorm一直以其强大的功能和友好的用户界面脱颖而出。现在,我们迎来了全新的WebStorm 2023版本,它将带给开发者们更加出色的…

华中科技大学李松课题组,利用机器学习预测多孔材料水吸附等温线

多孔材料的水吸附等温线是一个非常重要的参数,但这一参数的获得并不容易。这是因为多孔材料种类过多、结构多元,通过实验和计算的方式获得水吸附等温线数据成本过高,耗时过长。 华中科技大学的李松课题组,建立了一个两步机器学习模…

可以在uni-app使用的类vconsole.js插件

兴致勃勃在uni-app项目引入调试工具vconsole.js结果真机调试页面空白 怎么办?! 别着急 paradox老师有方法 替代插件下载地址:直接下载插件并引入HbuilderXuni_modules插件 - 类Vconsole APP端调试工具 - HF调试器 - DCloud 插件市场 下载完成在main.js中引入&…

鸿蒙开发环境搭建-deveco-studio 开发工具安装问题()

从华为官网下载工具deveco-studio, 下载地址 HUAWEI DevEco Studio和SDK下载和升级 | HarmonyOS开发者 这是下载后的工具 1、一步步安装步骤 报错了,一般安装都会报这个错误 看似问题不小,其实, 继续下步,就正常了&#xff0c…

栈回溯--在栈里挑出返回地址

GNU Arm Embedded Toolchain project files : GNU Arm Embedded Toolchain arm-none-eabi-addr2line -e F103_Moduel.axf -a -f 08000350 08001d94 0800260c 汇编中: ;HardFault_Handler ; PROC ; EXPORT HardFault_Handler …

神命令tree的魅力你get到了吗?

背景 日常工作中,有时候为了明确表达自己的意思,往往需要输出对应的目录层级结构,手动一个个输入往往显得不那么高级,效率相对较低,这时候拥有可以一键输出目录结构并且可以快速转化为文本的工具就比较方便&#xff0…

工业I/O模块的功能和应用介绍

在工业领域中,不同的设备常常适配不同的通信协议,不同的协议之间无法直接互通,导致现场实施过程中困难重重。工业io模块可以将各种现场信号转化为数字信号,然后传输给控制器进行处理,实现不同设备之间的互通&#xff0…

生命周期评估(LCA)与SimaPro碳足迹分析

SimaPro提供最新的科学方法和数据库以及丰富的数据,使您可以收集和评估产品和流程的环境绩效。通过这种方式,您可以将改变公司产品生命周期的想法提交给您的同事,以便阐明您的业务未来。 SimaPro软件的特点和功能: 完全控制产品生…

【matlab程序】南海土台风画法

【matlab程序】南海土台风画法 图片 往期推荐 图片 【python海洋专题一】查看数据nc文件的属性并输出属性到txt文件 【python海洋专题二】读取水深nc文件并水深地形图 【python海洋专题三】图像修饰之画布和坐标轴 【Python海洋专题四】之水深地图图像修饰 【Python海洋专…

2020年09月 Scratch(三级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch等级考试(1~4级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 执行下面程序,屏幕上最多会看到多少个苹果? A:10个 B:11个 C:1个 D:无法确定 答案:B 第2题 关于下面程序,说法正确的是 ? A:执行 后,马上执行