python 自动点击上传以后上传文件,python使用selenium模拟点击网页实现自动导入上传文件功能...
一、环境准备
Python版本:3.4
编辑器:Pycharm
excel文件:导入的excel模板
二、python代码
由于工作需要,需要每天定时导入相关excel文件进入后台数据库,由于导入的逻辑比较复杂,所以决定通过python模拟登陆导入网站,点击相关功能来实现自动导入。
代码如下:#!/usr/bin/env python
# coding=utf-8
# import time
from selenium import webdriver
import os
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
# import requests
# from selenium.webdriver.common.keys import Keys
# 自动化操作创研系统的线索导入功能
def ui_auto_operation():
# 模拟登陆
# rep = requests.Session()
browser = webdriver.Firefox()
browser.implicitly_wait(10) # 设置隐性等待,等待10S加载出相关控件再执行之后的操作
browser.maximize_window()
browser.get('http://www.*******.com.cn/****/Login.aspx')
# time.sleep(10) # 强制等待一般只用于测试
# browser.refresh()
# 输入用户名
username = browser.find_element_by_xpath('//*[@id="txtUserName"]')
username.clear()
username.send_keys('*******')
print('username input success')
# 输入密码
browser.find_element_by_xpath('//*[@id="txtPassword"]').send_keys('******')
print('password input success')
# # 加载验证码
# yzm = browser.find_element_by_xpath('/html/body/div[2]/div/div[2]/form/dl[3]/dd/input')
# yzm.send_keys(input('输入验证码:'))
# 点击登陆
browser.find_element_by_xpath('//*[@id="btnLogin"]').click()
print('login success')
# cookies = browser.get_cookies()
# for cookie in cookies:
# rep.cookies.set(cookie['name'], cookie['value'])
# 爬取对应网页的数据
browser.current_window_handle
browser.find_element_by_xpath('/html/body/div[2]/div[1]/div[1]/div[8]/div/a/span').click()
# 切换到当前窗口
browser.current_window_handle
# time.sleep(5)
tow_drive = browser.find_element_by_xpath('/html/body/div[2]/div[1]/div[1]/div[8]/ul/li[5]/a')
tow_drive.click()
print('turn success')
browser.current_window_handle
# time.sleep(2)
# 切换到iframe框架里面
browser.switch_to.frame(browser.find_element_by_xpath('//*[@id="mainFrame"]'))
# # 输入框只读属性的修改
# js = 'document.getElementById("Text1").removeAttribute("readonly");'
# browser.execute_script(js)
# # 定位并且输入路径数据
# receiveStart = browser.find_element_by_xpath('//*[@id="Text1"]')
# receiveStart.clear()
# receiveStart.send_keys('C:\\fakepath\\5096.xls')
# # receiveStart.send_keys(Keys.RETURN)
# 点击上传文件按钮
browser.find_element_by_xpath('//*[@id="btn1"]').click()
# 调用写好的exe实现上传,autoup.exe的建立参考下面的网站
# https://www..com/sunjump/p/7268805.html
os.system("C:\\fakepath\\autoup.exe")
# time.sleep(5)
load = browser.find_element_by_xpath('//*[@id="btn_lead"]')
load.click()
try:
# 每隔2s就去扫描弹出框是否存在,总时长是60s,存在就继续执行之后代码
WebDriverWait(browser, 60, 2).until(EC.alert_is_present())
# 处理弹出alert框
alert = browser.switch_to.alert
alert.accept()
finally:
browser.close()
# browser.quit()
if __name__ == '__main__':
# @version : 3.4
# @Author : robot_lei
# @Software: PyCharm Community Edition
ui_auto_operation()
三、注意事项
此网站属于内部使用,不用输入验证码就可以实现登陆,所以操作相对简单很多。其中遇到的主要问题:
(1)、iframe框架的切换,也就是加载的网页中有部分代码存在iframe里面,导致页面的代码加载不出来,python无法定位到相关的元素。
(2)、上传的输入框不是直接用的input和参数传入原因,导致不能直接在在上传的文件框输入需要导入的文件路径,需要点击导入按钮,然后选择文件路径,再点击上传按钮才可以上传。
(3)、alert弹出框处理,由于导入数据比较多的时候,时间过长会导致alert弹出框还没弹出,但是代码就开始操作弹出框了,此时肯定无法定位元素,所以需要等待一段时间定时扫描查看来处理弹出框。
(4)、使用SciTE Script Editor编辑程序时需要在file->Encoding里面选择编码,一般是utf-8。
对应代码如下:
;等待5秒钟,让上传窗口出现
WinWait("CLASS:#32770","",5)
;把输入焦点定位到上传输入文本框中,类型为Edit,编号为1,也就是上面获取到内容
ControlFocus("文件上传", "","Edit1")
;在文件名那里,输入需要上传的文件绝对路径
ControlSetText("文件上传", "", "Edit1", 'C:\fakepath\5096.xls')
;等待上传时间,单位是毫秒 1秒 = 1000 毫秒,文件大的话需要设置长点
Sleep(5000)
;点击"打开"按钮,也就是上传,完成整个上传过程
ControlClick("文件上传", "","Button1");
python 自动点击上传以后上传文件,python使用selenium模拟点击网页实现自动导入上传文件功能...相关推荐
- 【Python】Selenium模拟点击网页下载文件
整个流程大致如下: 1.首先需要在http://chromedriver.storage.googleapis.com/index.html中下载chrome浏览器版本对应的驱动文件,可以在浏览器[设 ...
- Python 爬取留言板留言(二):多线程版+selenium模拟
文章目录 一.项目概述 二.项目实施 1.导入所需要的库 2.全局变量和参数配置 3.产生随机时间和用户代理 4.获取领导的fid 5.获取领导所有留言链接 6.获取留言详情 7.获取并保存领导所有留 ...
- Python 爬取留言板留言(三):多进程版+selenium模拟
文章目录 一.项目概述 二.项目实施 1.导入所需要的库 2.全局变量和参数配置 3.产生随机时间和用户代理 4.获取领导的fid 5.获取领导所有留言链接 6.获取留言详情 7.获取并保存领导所有留 ...
- python selenium模拟点击
文章目录 1.安装谷歌浏览器 2.安装浏览器驱动 3.安装selenium 4.简单测试 5.打卡程序 6.linux设置定时任务 7.其他 1.安装谷歌浏览器 #下载包 wget https://d ...
- hxp 36C3 CTF Web题 WriteupBin Writeup (Selenium模拟点击+Content Security Policy+Nonce+Parsley.js触发错误提示)
WriteupBin – A web challenge from hxp 36C3 CTF https://ctftime.org/event/825 题目部署 本地搭建: 解压WriteupBin ...
- 爬取知乎壁纸:selenium模拟登陆获取cookies,再将cookies传递给requests
selenium很好用,但是爬取大量数据时速度较慢. 通过selenium模拟登陆,获取cookies,再将cookies传递给requests,通过requests爬取加快速度. 以为知乎网爬取壁纸 ...
- 【spider】selenium模拟点击斗鱼示例
from selenium import webdriver import timeurl = 'https://www.douyu.com/directory/all'# 动态html网页加载可能出 ...
- 模拟真人浏览网页-浏览器自动滚动-超简单方法
有些时候我们会想让浏览器自动滚动模拟真人浏览行为 打开浏览器控制台,切换到Console控制台 输入一下命令 var i = 0; setInterval(function(){window.scro ...
- java爬虫出发onclick事件_java爬虫(五)利用selenium 模拟点击获取动态页面的内容...
依赖的资源 1.ChromeDriver与Chrome版本对应参照表及ChromeDriver下载链接 http://npm.taobao.org/mirrors/chromedriver/ 2.Se ...
最新文章
- Java算法练习——正则表达式匹配
- vue2.x的小问题
- Oracle实例和服务知识点
- Centos7 yum安装Python3.6环境,超简单
- poj 1469 COURSES 解题报告
- android php mysql json 查询_android php mysql json
- CentOS7环境下搭建flume
- 【wordpress】wordpress环境的搭建
- AudioUnitRender -10876
- 下棋计算机是什么配置的啊,一个下棋人的电脑配置,请大家指教
- 北斗导航 | 基于最小二乘残差法与奇偶矢量法的RAIM算法(附代码)
- lena.bmp素材图像
- 一种简单的不净观(女人)方法,帮助看破色欲
- Java语言HttpClient使用代理IP
- Navicat Premium v12.0.23.0 破解教程x86,x64通用,手动破解
- Python自学指南-你好啊!Python
- (转)(异常分析) org.hibernate.MappingException: entity class not found
- 相关系数(用来衡量两变量间相关关系的大小)
- mybatis报错:java.sql.SQLException: 无效的列类型: 1111
- 网易云信短信接口java_网易云短信接口测试
热门文章
- Flowable 数据库表结构 ACT_RU_IDENTITYLINK
- flowable流程实例笔记(1)
- 如何将本地代码推送至远程仓库
- JavaScript 中,break , continue , return 的区别
- spring+mybatis+springMVC+redis缓存+mysql+bootstrap+异步提交----联系人小demo
- linux-centos7 常用的基本命令--用户组管理
- pythonrgb高精度浮点运算类型_python实现RGB字符串,按24位对齐后输出对应Integer行数字...
- python制作远程桌面控制_Python 远程桌面协议RDPY简介
- mysql 查看root_Mysql的Root密码忘记,查看或修改的解决方法(图文介绍)
- C语言 typedef 和 define 区别 - C语言零基础入门教程