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.hqwc.cn/news/210644.html

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

相关文章

使用原生js通过ajax实现服务器渲染的简单代码和个人改进

文章目录 前文提要代码实现主要参考服务器渲染实现逻辑网页呈现效果 代码分段讲解提要html的body部分css部分js部分xhr.open函数AJAX-onreadystatechange事件function函数简写方法附件功能:选中行 高亮 代码全文 前文提要 本文仅做个人学习记录,如有错误…

交通管理中的利器:揭秘交通监控大屏的优势和应用场景

交通监控大屏是一种用于监控交通情况的大屏展示方式,能够实时展示交通状况、车流量、车速等数据,为交通管理提供数据支持和决策参考。本文将介绍交通监控大屏的优势、应用场景和未来发展趋势。 一、交通监控大屏的优势 交通监控大屏的主要优势包括&…

【python海洋专题四十七】风速的风羽图

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

Cookie与Session

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

JAVA爬虫2 - Jsoup解析、对接MySQL、多线程爬虫、json库使用

官网:https://jsoup.org/download Jsoup是一款基于Java的HTML解析器,它可以方便地从网页中抓取和解析数据。它的主要作用是帮助开 发者处理HTML文档,提取所需的数据或信息。下面介绍几个常用的API: 选择器(Selector)API:用于根据CSS选择器语法选择HTML元素。 属性(Attribute…

PTA-使用函数求最大公约数

本题要求实现一个计算两个数的最大公约数的简单函数。 函数接口定义&#xff1a; int gcd( int x, int y ); 其中x和y是两个正整数&#xff0c;函数gcd应返回这两个数的最大公约数。 裁判测试程序样例&#xff1a; #include <stdio.h> int gcd( int x, int y ); i…

海外媒体推广发稿平台这8种方法助你一臂之力-华媒舍

在全球经济一体化和信息技术快速进步的背景下&#xff0c;海外市场的开拓对于企业的发展至关重要。要在海外市场上取得成果并非易事&#xff0c;因此我们需要借助一些方法来帮助我们取得成功。其中&#xff0c;海外媒体推广发稿平台是非常有效的工具之一。本文将介绍8种方法&am…

使用 css 实现文字单行居右, 换行居左展示

给外层盒子设置居右展示, 子盒子设置居左。 原理是&#xff0c;如果子盒子没有换行&#xff0c;那么子盒子的长度就是内容的长度&#xff0c;它根本没有空间将字体移动居左&#xff0c;父盒子的居左样式就会生效&#xff0c;子盒子就会居左展示。 当子盒子里面的文字换行了&…

【RtpRtcp】3: webrtc m79:video 相关创建及切片、发送

m79 的 客户端代码流程。 对于视频帧: CreateRtpStreamSenders 管理一组RtpStreamSender ,每一个RtpStreamSender 都进行rtp包的发送: 具体发送是RTPSenderVideo 处理,RTPSenderVideo 对收到的h264 帧,进行帧分片rtp,然后一组包一起使用LogAndSendToNetwork 发送的。 Rtp…

Linux:虚拟机安装Ubuntu系统

一、下载Ubuntu 地址&#xff1a;https://cn.ubuntu.com/download/desktop 二、安装 以上配置完成后&#xff0c;点击完成按钮&#xff0c;接下来就是一段较长时间的等待安装过程。 安装完成后&#xff0c;还有一些系统性配置。 系统配置非常简单&#xff0c;全部next即可。…

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

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

如何通过类似于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为例新建个项目&#xff0c;点击File->Project Structure 进入签名页面然后点击Sign in登录华…