python实现在某网站自动上传附件

news/2024/7/19 10:18:29 标签: python, 爬虫
python">import time
import os
from selenium import webdriver
from pywinauto.keyboard import send_keys
from pywinauto import Desktop
from pywinauto import Application
# 先安装pywin32,才能导入下面两个包
import win32api
import win32con
# 导入处理alert所需要的包
from selenium.common.exceptions import NoAlertPresentException
import traceback

# 环境配置
chromedriver = "C:\Program Files\Google\Chrome\Application"
os.environ["webdriver.ie.driver"] = chromedriver

driver = webdriver.Chrome()  # 选择Chrome浏览器
driver.get('url')  # 打开网站
# driver.maximize_window()  # 最大化谷歌浏览器
# 处理alert弹窗
filepath = 'E:\表格集3'
filename = os.listdir(filepath)

try:
    alert1 = driver.switch_to.alert  # switch_to.alert点击确认alert
except NoAlertPresentException as e:
    print("no alert")
    traceback.print_exc()
else:
    at_text1 = alert1.text
    print("at_text:" + at_text1)

time.sleep(1)

# driver.find_element_by_link_text('登录').click() # 点击“账户登录”

username = ""  # 请替换成你的用户名
password = ""  # 请替换成你的密码
email_token = "8DEDFV"
driver.find_element_by_id('user_name').click()  # 点击用户名输入框
driver.find_element_by_id('user_name').clear()  # 清空输入框
driver.find_element_by_id('user_name').send_keys(username)  # 自动敲入用户名

driver.find_element_by_id('user_password').click()  # 点击密码输入框
driver.find_element_by_id('user_password').clear()  # 清空输入框
driver.find_element_by_id('user_password').send_keys(password)  # 自动敲入密码
time.sleep(2)
# 采用class定位登陆按钮
driver.find_element_by_class_name('login-btn').click() # 点击“登录”按钮
# 采用xpath定位登陆按钮,
# driver.find_element_by_xpath('//*[@id="root"]/div/div[3]/form/button').click()
time.sleep(1)
driver.find_element_by_id('EMAIL').click()
time.sleep(1)


driver.find_element_by_id('email_token').click()  # 点击邮箱验证码输入框
driver.find_element_by_id('email_token').clear()  # 清空输入框
time.sleep(5)
# driver.find_element_by_id('email_send').click()   #获取验证码

driver.find_element_by_id('email_token').send_keys(email_token)  # 自动敲入邮箱验证码
time.sleep(15)
driver.find_element_by_xpath('/html/body/div[3]/div[2]/div[4]/form/a').click()
time.sleep(15)
for name in filename:

    driver.find_element_by_xpath('//*[@id="root"]/div/div/div/div/div[1]/div[3]/div/ul/li[4]/span').click()
    time.sleep(1)
    driver.find_element_by_xpath('//*[@id="root"]/div/div/div/div/div[1]/div[4]/div/div/div[2]/div/div[2]/div[4]/div[1]/span/div[1]/span/p').click()
    app = Desktop()  #创建操作桌面的对象
    dlg = app["打开"]   #获取弹窗的窗口标题
    # dlg.print_ctrl_ids()   #打印窗口的所有控件信息
    dlg["Toolbar3"].click()   #获取文件路径填写输入框并点击
    send_keys("E:\表格集3")     #在文件路径填写输入框输入文件存在的路径
    send_keys("{VK_RETURN}")  #输入文件路径后按回车键
    print(name)
    dlg["文件名(&N):Edit"].type_keys(name)  #获取文件名输入框并填写文件名
    dlg["打开(&O)"].click()  #获取“打开”控件并点击
    # app = Application().connect(class_name='#32770')
    time.sleep(5)
    driver.find_element_by_xpath('//*[@id="root"]/div/div/div/div/div[1]/div[4]/div/div/div[2]/div[2]/p[2]').click()
    time.sleep(3)

有个问题,就是dlg["文件名(&N):Edit"].type_keys(name)这一行代码中name不能有括号,貌似识别不了,暂时没找到解决方案

使用time.sleep()纯粹懒罢了。


http://www.niftyadmin.cn/n/1514708.html

相关文章

python自动获取163邮箱验证码

PS:主要使用selenuim和谷歌驱动 这个里面难点主要是如何自动登录163邮箱,因为163邮箱里面模块的id或者classname都是动态码 所有首先需要定位登录框的frame 这一步 需要使用selenuim中的模糊定位start-with driver.find_element_by_xpath("//if…

Java(长见识)—— 数字之间可以用下划线分割

今天刷视频的时候,突然发现视频中一段代码很奇怪,如下: 然后立马开电脑尝试了一下 *****! public class Demo1 {public static void main(String[] args) {int num1 10_0000_0000;System.out.println(num1);} }原来数字之间是可…

贪心算法及几个经典例子

贪心算法 一、基本概念:所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。贪心算法没有固定的算法框架,算法设…

算法策略的总结

一、不同算法策略特点小结 1、贪心策略 贪心策略一方面是求解过程比较简单的算法,另一方面它又是对能适用问题的条件要求最严格(即适用范围很小)的算法。 贪心策略解决问题是按一定顺序,在只考虑当前局部信息的情况下,…

汉诺塔解析附上代码

1问题描述 问题提出:有三个塔(分别为A号,B号和C号)。开始时.有 n个圆形盘以从下到上、从大到小的次序叠置在A塔上。现要将A 塔上的所有圆形盘,借助B搭,全部移动到C搭上。且仍按照原来 的次序叠置。 移动的规则如下&…

Java 字符串连接符 + 和数字顺序摆放顺序会产生差异

对于String来说,使用连接符,如果连接符()前面是字符串,后面是数字,则会直接将数字转换为字符串直接连接。 public class Demo3 {public static void main(String[] args) {int a 10;int b 20;System.out…

(LeetCode) 两数相加

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0 …

(LeetCode)无重复字符的最长子串

给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 自己写的破代码: public static int lengthOfLongestSubstring(String s) {int length1 0;//初始化子串长度为0String len1 "";//初始化子串if (s.length() 1) {return…