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.pswp.cn/news/533018.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/533018.shtml
英文地址,請注明出處:http://en.pswp.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的變量介紹,以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可…