文章目录
selenium
核心:直接模拟用户操作
安装浏览器,驱动器ChromeDriver,配置环境变量
驱动器
在chrome输入框中输入:chrome://version/
我的是92,就去网址里找92的driver
配置环境变量(可选)
安装selenium
以tsinghua的镜像安装:pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple selenium
操作
打开关闭浏览器
browser = selenium.webdriver.Chrome("谷歌驱动的地址") # 打开谷歌浏览器
browser = selenium.webdriver.PhantomJS('C:\Users\e\PycharmProjects\untitled\venv\Scripts\phantomjs') # 打开PJS浏览器
browser.close() # 关闭当前标签页,如果只有一个则关闭浏览器
browser.quit() # 彻底关闭,包括后台进程
打开网址
browser.get("https://www.yuque.com/qiguihongtong/kb/bg93pz/edit")
※寻找节点
node = browser.find_element_by_xpath("//span[@style = 'user-select: auto;']") # 寻找单节点
nodes = browser.find_elements_by_xpath("//span[@style = 'user-select: auto;']") # 寻找多节点
推荐插件:xpath helper
使用:Hit Ctrl-Shift-X (or Command-Shift-X on OS X), or click the XPath Helper button in the toolbar, to open the XPath Helper console.
输入信息
input = browser.find_element_by_xpath('//input')
input.send_keys('青')
点击按钮
button = browser.find_element_by_xpath('')
button.click() # 不推荐,不稳定,会报错
browser.execute_script("arguments[0].click();", button)
模拟键鼠
selenium方式
ActionChains(driver).key_down(Keys.CONTROL).send_keys('f').perform()#注意key_down不能用于普通的abcd
win32方式
win32api.keybd_event(0x11, 0, 0, 0)
win32api.keybd_event(0x56, 0, 0, 0)
win32api.keybd_event(0x56, 0, win32con.KEYEVENTF_KEYUP, 0)
win32api.keybd_event(0x11, 0, win32con.KEYEVENTF_KEYUP, 0)
更多操作
详见https://www.cnblogs.com/songzhixue/p/11270593.html 非常详细
实例
示例一:腾讯文档自动填写
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
url = "https://docs.qq.com/sheet/DS3FPbHBTT3FNRUJx?groupUin=CTdDUK7DtI2KjO6hZkPIMg%253D%253D"
browser = webdriver.Chrome("C:\Program Files\Google\Chrome\Application\chromedriver.exe")
browser.get(url)
browser.implicitly_wait(10)#最多等它十秒,刷新出来了就继续,不然就结束
#登录,用快速登入的功能,前提,已经电脑qq登入了
# time.sleep(1)
browser.find_element_by_id('header-login-btn').click()#点击登入按钮
time.sleep(1.5)
browser.switch_to.frame(browser.find_element_by_id('login_frame'))
browser.find_element_by_class_name('img_out_focus').click()
browser.switch_to.parent_frame()
time.sleep(2)
browser.find_element_by_xpath('//*[@id="canvasContainer"]/div[1]/div[2]').click()
time.sleep(10)
# 模拟c+f找到自己所在行列,进行填写
ActionChains(browser).key_down(Keys.CONTROL).send_keys('f').perform()
browser.find_element_by_id('search-panel-input').send_keys("yourname")#输入自己的名字
time.sleep(1)
browser.find_element_by_class_name('dui-modal-close').click()# 关闭搜索窗口
#操作节点
info=[]#写自己的信息在这里
line = len(info)
for i in range(0,line):
cell = browser.find_element_by_id('alloy-simple-text-editor')
cell.click()
cell.send_keys(Keys.CONTROL+'a')
cell.send_keys(Keys.DELETE)
cell.send_keys(info[i])
cell.send_keys(Keys.TAB)
time.sleep(0.5)
#点击保存
browser.find_element_by_xpath('//*[@id="canvasContainer"]/div[1]/div[2]').click()
ActionChains(browser).key_down(Keys.CONTROL).key_down('s').perform()
#关闭浏览器
browser.quit()
示例二:微哨自动填写
import time
import pyperclip
import win32api
import win32con
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
url = "http://web.weishao.com.cn/login"
browser = webdriver.Chrome("C:\Program Files\Google\Chrome\Application\chromedriver.exe")
browser.get(url)
browser.implicitly_wait(10)#最多等它十秒,刷新出来了就继续,不然就结束
#定义用户信息
user=""
pwd=""
pyperclip.copy("学校名")
# 登录功能
school = browser.find_element_by_class_name("Select-placeholder")
school.click()
time.sleep(1)
win32api.keybd_event(0x11, 0, 0, 0)
win32api.keybd_event(0x56, 0, 0, 0)
win32api.keybd_event(0x56, 0, win32con.KEYEVENTF_KEYUP, 0)
win32api.keybd_event(0x11, 0, win32con.KEYEVENTF_KEYUP, 0)
win32api.keybd_event(0x0D, 0, 0, 0)
win32api.keybd_event(0x0D, 0, win32con.KEYEVENTF_KEYUP, 0)
username = browser.find_element_by_id("username")
password = browser.find_element_by_id("password")
username.send_keys(user)
password.send_keys(pwd)
browser.find_element_by_class_name("ws-btn-primary-exlarge").click()
time.sleep(2)
# 进入打卡页面
browser.find_elements_by_class_name("_2BGxvoElgOLUfVlc8LDiM3")[2].click()
time.sleep(1)
browser.find_element_by_class_name("_1IfY7BzDNqbMrOzt5CMCq2").click()
browser.find_element_by_class_name("ws-btn-primary").click()
time.sleep(10)
#跳到最终页面
handles = browser.window_handles
browser.switch_to_window(handles[1])
browser.find_element_by_class_name("content").click()
#打卡
#undo
# 关闭浏览器
browser.find_element_by_tag_name("li")