Python+Selenium——自动办公美梦的破碎与重建
在《半小时手工解决的活,让我意外学会了 python 的 pdfkit 库》这篇文章最后,
我说“知耻而后勇,我要学 selenium。”
1 自动化美梦破碎
在各类“9.9元掌握 Python”、“0元免费学”的广告里,经常有类似的描述和配图:
同样的公司,同样的岗位,相似的工作,但是小明发现当自己在夜色中加班时,自己的同事小红却经常早早下班。而且呢,小红的工作完成的准确率还很高。有一天,小明终于忍不住,去向小红讨教经验。这时,小红缓缓的说:“人生苦短,我用python”。然后附上了 Python 的入门目录和课程付费入口。
广告的思路没错,要想办法提高工作效率,减少重复性的劳动,把时间投入到有价值的地方上去。学习编程抛开学校里系统的理论与部分编程语言基础教学,还要结合业务、结合实践。这样学习才是最有效的,也是最不容易遗忘的。不过在尝试了 Selenium 以后,发现还是不能很好的解决批量打印 PDF 调整格式的问题。
2 运用工具的前提——熟悉业务逻辑
要带着明确的问题去做。如,我是要模拟什么操作,这项操作中,哪些部分是可以通过程序标准化执行的。先用 Jupyter 一行一行,边写边执行,然后测试单独的语句是否能正常运行。
然后再把它用函数或者类封装执行。
那么一般的办公系统里面,selenium 常用的操作有元素的定位、模拟鼠标点击、键盘快捷键的操作,这些都简单。难的是把要模拟的操作合理分块,不要乱了函数去调用。
3 重建——代码分享
(1) 导包
from selenium import webdriver #自动化工具
from selenium.webdriver.common.by import By #通过 By 定位元素
from selenium.webdriver.common.keys import Keys #通过 Selenium send_keys传递值
#导入一个选择包
from selenium.webdriver.support.select import Select
import time # 页面等待,避免没刷新出来报错
import re # 正则表达式处理库
(2)登录函数,涉及到输入文本(sendkeys):
def login(username,passw): # 传两个参数进来。
url = '# url #'
browser = webdriver.Chrome(r'.\chromedriver.exe') # 所用谷歌浏览器对应版本的 chromedriver.exe 的绝对路径
browser.get(url)
#输入用户名:
browser.findelement(By.ID, "username").sendkeys(username)
#输入密码:
browser.findelement(By.ID, "userpassword").sendkeys(passw)
#点击登录
browser.findelement(By.CLASSNAME,'login100-form-btn').click()
return browser
(3) 窗体切换函数:
def left_frame():
# 从默认frame 跳到左边的frame
driver.switch_to.default_content()
driver.switch_to.frame(driver.find_element_by_xpath("//frame[contains(@src,'leftframe')]")) #这里之前被卡过。元素选择不了,可能是因为窗体没定位对。
def main_frame():
#要先返回默认的 frame
# 再跳到右边的 frame
driver.switch_to.default_content()
driver.switch_to.frame('mainContent')
(4)选择功能:
Select(driver.find_element_by_xpath('# 点击元素右键点 copy full xpath #')).select_by_value('item2')
(5)进阶:
Xpath 的定位,一开始用默认的很长一串,然后通过尝试把长的缩短。
基本的用法是 :
// 表示从整个网页下选择所有的框。
/div[@class="XXX"] 表示选择 class 为“XXX”的 div 标签。
在 scrapy 用 response 取 Xpath 时,经常犯错:
节点要一级一级定位到最下面的一级,才可以提取文本。
(6)精进:
driver.find_element_by_
在这里我通常喜欢,按 tab 键,然后就可以看到很多种定位的方法。然后 help() 一下或者在 CSDN 社区里找一下。然后你就会从一个小口,精通各种定位方法。当然,也可以选择两三个常用的方法,容错性更大一点。
工具要用起来,才更有价值。
希望这篇文章对你有所启发。
元旦快乐!