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");

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

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

相关文章

php绘制频谱图,一步一步教你实现iOS音频频谱动画(二)

本文是系列文章中的第二篇,上篇讲述了音频播放和频谱数据计算,本篇讲述数据处理和动画的绘制。前言在上篇文章中我们已经拿到了频谱数据,也知道了数组每个元素表示的是振幅,那这些数组元素之间有什么关系呢?根据FFT的原…

php删除尾部字符,php如何删除字符串末尾字符

我们知道字符串删除字符的方式有好几种,今天就来介绍三种php删除字符串最后一个字符的函数,有需要的小伙伴可以参考一下。方法一:substr()函数substr()函数返回字符串的一部分。语法如下:substr(string string, int start, int [l…

empinfo Oracle数据库,Oracle数据库---包

--根据员工号或员工姓名获取员工的信息--根据员工号或员工姓名删除员工的信息--创建包规范CREATE OR REPLACE PACKAGE overload_pkgISFUNCTION get_info(eno NUMBER) RETURN emp%ROWTYPE;FUNCTION get_info(name VARCHAR2) RETURN emp%ROWTYPE;PROCEDURE del_emp(eno NUMBER);P…

oracle查看context,oracle context(上下文)

context在计算机领域翻译为上下文context的信息也就是当前会话中的环境变量,如:登录的session_id,用户名,语言等信息查看context中的属性信息。oracle默认的为我们创建了一个context叫userenv(user environment)SYS_CONTEXT(USERE…

oracle标量子查询的优势,标量子查询

--标量子查询select e.empno, e.ename, e.sal, e.deptno,(select d.dname from dept d where e.deptno d.deptno)as dnamefrom emp e--插入一条数据insert into emp(empno,deptno) values(9999,null)--返回结果15条记录--改成left join(hash outer)select e.empno, e.ename, e…

切割照片php上传,php下ajax的文件切割上传

var myForm document.getElementById("myForm");var upfile document.getElementById("upfile");myForm.onsubmit function() {//获取文件对象var file upfile.files[0];//获取文件大小var fileSize file.size;//一次截取的大小(字节)var CutSize 10…

oracle插补缺失日期,Oracle连接 ORA-28001: 口令已经失效解决方法

cmd进入命令行C:UsersAdministrator>sqlplus / as sysdbaSQL*Plus: Release 11.2.0.1.0 Production on 星期四 9月 24 15:19:21 2020Copyright (c) 1982, 2010, Oracle. All rights reserved.连接到:Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Pr…

PHP 蒙太奇马赛克拼图,AndreaMosaic制作一幅马赛克拼图

大家在网上应该都见过用很多幅图片拼成的马赛克图片,今天小编就为大家介绍AndreaMosaic制作一幅马赛克拼图方法,不会的朋友快快来学习吧!软件名称:AndreaMosaic(蒙太奇图片制作软件) V6.1.0.4 中文安装免费版软件大小:…

php mongo 查询count,[PHP] 使用PHP在mongodb中进行count查询

原文:https://www.cnblogs.com/taoshihan/p/12362111.html在php7的mongodb扩展中,当要查询某个集合在某个条件下的数据个数时,可以使用下面的方式来获取。比原生的命令要复杂许多比旧版mongo扩展也复杂许多需要使用到MongoDB\Driver\Command …

oracle字段类型设计,Oracle字段类型设计与实际业务不符引发的问题

在Oracle表的设计过程中,开发人员总是对字段的类型不以为然,下面来演示一个例子,按照应该设计为number的,结果设计成了varcha在Oracle表的设计过程中,开发人员总是对字段的类型不以为然,下面来演示一个例子…

linux下进程监控6,Linux进程监控技术—精通软件性能测试与LoadRunner最佳实战(6)...

8.2.5 Linux操作系统进程监控技术Linux在进程监控方面同样出色,不仅可以通过图形用户界面的管理工具,还可以用命令方式显示进程相关信息。像“Windows的任务管理器”一样,在RedHat 9中可以通过单击“系统工具”→“系统监视器”,…

linux pcie命令,setpci命令_Linux setpci 命令用法详解:查询和配置PCI设备的使用工具...

setpci命令是一个查询和配置PCI设备的使用工具。语法setpci(选项)(参数)选项-v:显示指令执行的细节信息;-f:当没有任何操作需要完成时,不显示任何信息;-D:测试模式,并不真正将配置信息写入寄存器…

linux proc文件 write的原子性,Linux命令之write调用的原子性

linux命令是对Linux系统进行管理的命令。本文介绍的关于linux命令中write调用的原子性的详细描述,具体内容如下所述。UNIX环境高级编程中关于原子操作的介绍,其中有一种情形是在文件尾端添加数据。文中说,如果多个进程都需要将数据添加到某一…

linux 命令行 迅雷替代,Mac/Linux下迅雷替代方案

还记得我两年前写的《DIY了家用NAS》吗?现在又带来新的升级啦。当初的NAS最多能使用Transmission来进行BT下载,那时就在想,如果能下载普通的http资源就好了。再进一步,有什么方案可以通吃所有下载方式呢? 记得那个时候…

linux好用的编译器,推荐几款Linux下比Notepad++好的编辑器软件

Notepad这一段又出风头了,好好的做你软件多好,非得参杂入政治。前两天开源文本编辑器 Notepad 发布了 7.8.1 版本,然后在该版本中作者居然摸黑中国,具体的内容请大家自行百度。而且这已经不是 Notepad 第一次这么干了!…

linux下调用python脚本,Linux下QT调用Python脚本的解决方案,Qt,python,一种,解决办法

最近在做一个深度学习对图片中对象识别效果的检测工具,其主要功能就是将自己标注的图片与识别结果图片进行对比然后计算识别的准确等参数,并提供原图与结果图片的显示功能。脚本主要完成识别与计算功能,QT完成数据的整理显示与图片的显示。我…

linux获取bind返回值信息,v$sql_bind_capture 获取绑定变量信息

截取自v$sql_bind_capture 对于游标中定义的每一个绑定变量都会有视图中的一行对应。主要包含三个部分:指向父游标(hash_value, address)和子游标(hash_value, child_address)的信息,变量类型定义,变量的值(不包含复杂的值:LONG,LOB,和…

linux boost教程,Linux上安装使用Boost入门指导

获得boostboost分布只需要头文件的库使用boost建立一个简单的程序准备使用boost二进制文件库把你的程序链接到boost库1.获得boost解压2.boost分布boost_1_46_1.........................boost根目录boost/.....................................所有boost头文件libs/..........…

vps如何linux内核4.19,Linux kernel 4.19 RC1 发布,一个相当大的版本

原标题:Linux kernel 4.19 RC1 发布,一个相当大的版本Linus Torvalds今天发布了第一个候选版本(RC),正式启动了即将推出的Linux 4.19内核系列的开发周期。自Linux 4.18内核系列推出以来已经过去两周了,因此下一个主要版本Linux ke…

linux下变量名长度,Linux中shell的变量介绍

Linux中shell的变量介绍发布时间:2020-06-24 16:20:39来源:亿速云阅读:112作者:元一这期内容当中的小编将会给大家带来有关Linux中shell的变量介绍,以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可…