[Python自动化办公1]查询与自动登录网页

最近使用了Python倒腾了一些脚本,主要是一些重复的工作,在这里也分享给大家,希望有所收获.
本次自动化内容主要分为查询和登录网页内容.

目录

  • 查询
  • 自动登录网页
    • outlook mail
    • QQ mail
    • 163 mail

查询

在很多时候,很多人需要对着一份名单一遍遍的查哪些人作业或者材料没有交齐,有时候还会看混,不妨使用下面这个代码来测试跑一下.主要内容为:给你一份excel表,上面写的是姓名和编好,同时你是类似于收作业的人,需要做好登记,哪些人交了哪些人没有交,人数少了可以对着看,但是人数一多就遇到了问题.所以跑个脚本也是很有必要的了.当然了,这里就采取python的简单功能,不使用一些shell脚本来辅助工作(有时候搭配shell会让事情事半功倍的)

首先是Python需要打开excel表,原有的库是没有的,需要下载模块,模块是xlrd,最好下载1.2.0版本的,这样就可以读取到.xlsx文件了.接着需要读取哪张表,表名在excel左下角会显示.
我这里的操作是将编好读取到list中,便于查询.
然后根据大家提交的文档,一般都是对应好的,例如:编号-姓名-主题,这里就需要对每份文件名做一个切片,注意文件后缀名也算在里面的,比如.docx也包含这个字符串中,所以需要对其进行处理.代码如下,路径已用###标出,注意路径的绝对路径和相对路径问题.

import os
import xlrd # pip install xlrd==1.2.0
# # 学生名单
wb=xlrd.open_workbook('1.xlsx') # 表名
sheet=wb.sheet_by_name('Sheet1') #内表名字
 
rows=sheet.nrows  # 行数,可以看出有多少人
list1=sheet.col_values(1,1,rows+1)  
a_int=list(map(int,list1)) # 将字符串转换为int


path1=r'########path'
path2=r'########path'
cout=0
list1=[] 
for name in os.listdir(path1):
    cout+=1 
    str1=name[-24:-14:1] # 字符串切片:
    a=int(str1) 
    list1.append(a)
for name in os.listdir(path2):
    cout+=1
    str1=name[-24:-14:1]
    a=int(str1)
    list1.append(a)
    
print('没交的人名单')
for i in range(len(list1)):
    if a_int[i] not in list1:
        print(a_int[i])
print('\n交了的人总人数:'+str(cout))

如下是运行的截图模块.
[Python自动化办公1]查询与自动登录网页_第1张图片

自动登录网页

也许在很多人看来,登录邮箱是十分繁琐的事情,每天也要处理一大堆关于邮箱的问题.一般在公司里面使用的公司邮箱,主要登陆平台大多都是outlook.这里我以outlook为例,详细讲述如何使用python自动登录网页,以三种邮箱为案例,每一个案例都有些不同.
(至于为什么需要自动登录,那当然是可以又可以写一些脚本来爬取数据了,后面等我研究一阵再讨论讨论)

首先要自动登录邮箱,需要下载chromdriver驱动.如下链接:
驱动1
根据对应的版本下载对应的驱动.
[Python自动化办公1]查询与自动登录网页_第2张图片
我这里是103.0.5060.114,所以下载103.0.5060版本就好,至于后面不对应没事的.
windows用户下载完以后解压,然后放在c:\tools 环境变量配一下路径,就可以引用了.
mac用户需要下载到usr/local/bin 或者usr/bin中配置就可以了,不过我用mac的时候倒是用的是绝对路径,**注意mac下的驱动不要加后缀名例如.exec,**不然运行不出来的!

outlook网页邮箱比较好操作,qq邮箱需要定位iframe模块,163邮箱比较麻烦,需要进行模糊查询与定位的(因为其id名自动变的)

这里教一些技巧,首先使用chrome进入到开发者模式,然后选中鼠标的按钮,点击登录框会定位到所在id,一般来说没有auto的都是静态id,这里直接定位就可以了.
其它网站的登录也类似
[Python自动化办公1]查询与自动登录网页_第3张图片

outlook mail

from selenium.webdriver import Chrome
from selenium.webdriver.common.keys import Keys
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
import time

# browser = Chrome(executable_path='chromedriver.exec')
# service是驱动路径
s = Service(r"path") 
browser= webdriver.Chrome(service=s)

url = 'http://partner.outlook.cn'
browser.get(url)
script = 'Object.defineProperty(navigator,"webdriver",{get:() => false,});'
#运行Javascript
browser.execute_script(script)
# 获取账号框
mail = browser.find_element(value='i0116')
userNameAreaStr = "邮箱账户"
passwordAreaStr = "密码"
mail.send_keys(userNameAreaStr)
#获取下一步并自动跳转
nextStep = browser.find_element(value='idSIButton9')
time.sleep(4)
nextStep.click()
time.sleep(4)
# 获取密码框
passwordInput = browser.find_element(value="passwordInput")
# 输入密码
passwordInput.send_keys(passwordAreaStr)

# 登录
submitButton = browser.find_element(value="submitButton")
submitButton.click()
# 点击不保持登陆状态
idBtn_Back = browser.find_element(value="idBtn_Back")
idBtn_Back.click()
time.sleep(4)
# 搜索框
searchInput = browser.find_element(value="//div[@id='searchBoxId-Mail']/div[3]/div[1]/input")
searchStr = "Rule detected"
# 输入文本
searchInput.send_keys(searchStr)
searchInput.send_keys(Keys.ENTER)
time.sleep(4)

QQ mail

qq mail有些不同,需要定位iframe,注意因为版本更新,switch_to_frame已经改为switch_to.frame(id-name)

from selenium.webdriver import Chrome
from selenium.webdriver.common.keys import Keys
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
import time

# s = Service(r"/pathr")
# browser= webdriver.Chrome(service=s)
browser = Chrome(executable_path='chromedriver.exe')
url='https://mail.qq.com/'
browser.get(url)
script = 'Object.defineProperty(navigator,"webdriver",{get:() => false,});'
browser.switch_to.frame("login_frame")
browser.execute_script(script)

mail=browser.find_element(value='u')
username='[email protected]'
passwordstr="密码"
mail.send_keys(username)
pas=browser.find_element(value="p")
pas.send_keys(passwordstr)
nextstep=browser.find_element(value="login_button")
nextstep.click()

163 mail

163 mail 里面的id会自动改变的,所以这里采用findxpath的方法来定位的,而不是采用find_id,注意因为版本问题find_element_by_name()已经改为了find_element(“name”,“”)了,其余类似改变.其中需要用到模糊查询等功能,在登录这方面,163做得较前面好一些.

from selenium.webdriver import Chrome
from selenium.webdriver.common.keys import Keys
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
import time

# s = Service(r"path")
# browser= webdriver.Chrome(service=s)
browser = Chrome(executable_path='chromedriver.exe')
url='https://mail.163.com/'
browser.get(url)
script = 'Object.defineProperty(navigator,"webdriver",{get:() => false,});'
iframe=browser.find_element("xpath",'//*[@id="loginDiv"]/iframe') # 定位+模糊查询
browser.switch_to.frame(iframe)
browser.execute_script(script)

mail=browser.find_element("xpath","//input[starts-with(@id,'auto-id-')]")
# mail=browser.find_element("name",'email')
username='邮箱'
passwordstr="密码"
mail.send_keys(username)
pas=browser.find_element("name","password")
# pas=browser.find_element("name",'password')
pas.send_keys(passwordstr)
nextstep=browser.find_element(value="dologin")
nextstep.click()

你可能感兴趣的:(Python,python,自动化,开发语言)