一、环境准备

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模拟点击网页实现自动导入上传文件功能...相关推荐

  1. 【Python】Selenium模拟点击网页下载文件

    整个流程大致如下: 1.首先需要在http://chromedriver.storage.googleapis.com/index.html中下载chrome浏览器版本对应的驱动文件,可以在浏览器[设 ...

  2. Python 爬取留言板留言(二):多线程版+selenium模拟

    文章目录 一.项目概述 二.项目实施 1.导入所需要的库 2.全局变量和参数配置 3.产生随机时间和用户代理 4.获取领导的fid 5.获取领导所有留言链接 6.获取留言详情 7.获取并保存领导所有留 ...

  3. Python 爬取留言板留言(三):多进程版+selenium模拟

    文章目录 一.项目概述 二.项目实施 1.导入所需要的库 2.全局变量和参数配置 3.产生随机时间和用户代理 4.获取领导的fid 5.获取领导所有留言链接 6.获取留言详情 7.获取并保存领导所有留 ...

  4. python selenium模拟点击

    文章目录 1.安装谷歌浏览器 2.安装浏览器驱动 3.安装selenium 4.简单测试 5.打卡程序 6.linux设置定时任务 7.其他 1.安装谷歌浏览器 #下载包 wget https://d ...

  5. 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 ...

  6. 爬取知乎壁纸:selenium模拟登陆获取cookies,再将cookies传递给requests

    selenium很好用,但是爬取大量数据时速度较慢. 通过selenium模拟登陆,获取cookies,再将cookies传递给requests,通过requests爬取加快速度. 以为知乎网爬取壁纸 ...

  7. 【spider】selenium模拟点击斗鱼示例

    from selenium import webdriver import timeurl = 'https://www.douyu.com/directory/all'# 动态html网页加载可能出 ...

  8. 模拟真人浏览网页-浏览器自动滚动-超简单方法

    有些时候我们会想让浏览器自动滚动模拟真人浏览行为 打开浏览器控制台,切换到Console控制台 输入一下命令 var i = 0; setInterval(function(){window.scro ...

  9. java爬虫出发onclick事件_java爬虫(五)利用selenium 模拟点击获取动态页面的内容...

    依赖的资源 1.ChromeDriver与Chrome版本对应参照表及ChromeDriver下载链接 http://npm.taobao.org/mirrors/chromedriver/ 2.Se ...

最新文章

  1. Java算法练习——正则表达式匹配
  2. vue2.x的小问题
  3. Oracle实例和服务知识点
  4. Centos7 yum安装Python3.6环境,超简单
  5. poj 1469 COURSES 解题报告
  6. android php mysql json 查询_android php mysql json
  7. CentOS7环境下搭建flume
  8. 【wordpress】wordpress环境的搭建
  9. AudioUnitRender -10876
  10. 下棋计算机是什么配置的啊,一个下棋人的电脑配置,请大家指教
  11. 北斗导航 | 基于最小二乘残差法与奇偶矢量法的RAIM算法(附代码)
  12. lena.bmp素材图像
  13. 一种简单的不净观(女人)方法,帮助看破色欲
  14. Java语言HttpClient使用代理IP
  15. Navicat Premium v12.0.23.0 破解教程x86,x64通用,手动破解
  16. Python自学指南-你好啊!Python
  17. (转)(异常分析) org.hibernate.MappingException: entity class not found
  18. 相关系数(用来衡量两变量间相关关系的大小)
  19. mybatis报错:java.sql.SQLException: 无效的列类型: 1111
  20. 网易云信短信接口java_网易云短信接口测试

热门文章

  1. Flowable 数据库表结构 ACT_RU_IDENTITYLINK
  2. flowable流程实例笔记(1)
  3. 如何将本地代码推送至远程仓库
  4. JavaScript 中,break , continue , return 的区别
  5. spring+mybatis+springMVC+redis缓存+mysql+bootstrap+异步提交----联系人小demo
  6. linux-centos7 常用的基本命令--用户组管理
  7. pythonrgb高精度浮点运算类型_python实现RGB字符串,按24位对齐后输出对应Integer行数字...
  8. python制作远程桌面控制_Python 远程桌面协议RDPY简介
  9. mysql 查看root_Mysql的Root密码忘记,查看或修改的解决方法(图文介绍)
  10. C语言 typedef 和 define 区别 - C语言零基础入门教程