以下操作可以模拟对鼠标键盘的一系列顺序操作。
# 将字符串text复制到剪切板
win32clipboard.OpenClipboard()
win32clipboard.EmptyClipboard()
win32clipboard.SetClipboardText('text')
win32clipboard.CloseClipboard()
win32api.SetCursorPos([200,370]) #数值[水平位置,垂直位置]
#执行左单键击,若需要双击则延时几毫秒再点击一次即可
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP | win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
#右键单击
win32api.mouse_event(win32con.MOUSEEVENTF_RIGHTUP | win32con.MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0)
# Ctrl+s (Ctrl+a、Ctrl+v操作类似)
win32api.keybd_event(17, 0, 0, 0) # 按下Ctrl键
win32api.keybd_event(83, 0, 0, 0) # 按下s键
win32api.keybd_event(83, 0, win32con.KEYEVENTF_KEYUP, 0) # 释放Ctrl键
win32api.keybd_event(17, 0, win32con.KEYEVENTF_KEYUP, 0)
# 按下回车并释放回车键
win32api.keybd_event(13, 0, 0, 0)
win32api.keybd_event(13, 0, win32con.KEYEVENTF_KEYUP, 0)
基于pywin32,模仿鼠标键盘操作,可以实现完整网页的另存为操作(包括html以及图片链接等,效果与手动保存网页效果相同),示例如下:
def saveWeb_main2(url="https://www.baidu.com"):
driver = webdriver.Firefox()
driver.get(url)
driver.maximize_window()
time.sleep(2)
title = driver.title
# 设置路径为:当前项目的绝对路径+文件名
# path = (os.path.dirname(os.path.realpath(__file__)) + "\\" + title + ".html")
# 定位到指定网页元素,鼠标右击操作,context_click()
# context = driver.find_element_by_css_selector(".index-logo-src")
# ActionChains(driver).context_click(context).perform()
# time.sleep(3)
# 将路径复制到剪切板
win32clipboard.OpenClipboard()
win32clipboard.EmptyClipboard()
win32clipboard.SetClipboardText(title)
win32clipboard.CloseClipboard()
# #1、鼠标定位到(30,50)
# win32api.SetCursorPos([200,150])
# #执行左单键击,若需要双击则延时几毫秒再点击一次即可
# # win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP | win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
# #右键单击
# win32api.mouse_event(win32con.MOUSEEVENTF_RIGHTUP | win32con.MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0)
# #2、按下下键,选择“网页另存为”
# win32api.keybd_event(40, 0, 0, 0)
# time.sleep(1)
# win32api.keybd_event(40, 0, 0, 0)
# time.sleep(1)
# win32api.keybd_event(40, 0, 0, 0)
# time.sleep(1)
# win32api.keybd_event(40, 0, 0, 0)
# time.sleep(1)
# win32api.keybd_event(40, 0, 0, 0)
# time.sleep(1)
# win32api.keybd_event(40, 0, 0, 0)
# time.sleep(1)
# #3、 按下回车
# win32api.keybd_event(13, 0, 0, 0)
# time.sleep(1)
# #4、 释放回车键
# win32api.keybd_event(13, 0, win32con.KEYEVENTF_KEYUP, 0)
# time.sleep(1)
# #5、 释放下键
# win32api.keybd_event(40, 0, win32con.KEYEVENTF_KEYUP, 0)
# time.sleep(1)
# Ctrl+s 可以替换上述1-5步
win32api.keybd_event(17, 0, 0, 0)
win32api.keybd_event(83, 0, 0, 0)
win32api.keybd_event(83, 0, win32con.KEYEVENTF_KEYUP, 0)
win32api.keybd_event(17, 0, win32con.KEYEVENTF_KEYUP, 0)
time.sleep(1)
#鼠标定位输入框并点击
win32api.SetCursorPos([200,370]) # 输入框的定位可能不同的尺寸会有不同定位位置,可以自己多次尝试
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP | win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
# win32api.mouse_event(win32con.MOUSEEVENTF_RIGHTUP | win32con.MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0)
time.sleep(1)
# 按下ctrl+a
win32api.keybd_event(17, 0, 0, 0)
win32api.keybd_event(65, 0, 0, 0)
win32api.keybd_event(17, 0, win32con.KEYEVENTF_KEYUP, 0)
win32api.keybd_event(65, 0, win32con.KEYEVENTF_KEYUP, 0)
time.sleep(1)
# 按下ctrl+v
win32api.keybd_event(17, 0, 0, 0)
win32api.keybd_event(86, 0, 0, 0)
win32api.keybd_event(17, 0, win32con.KEYEVENTF_KEYUP, 0)
win32api.keybd_event(86, 0, win32con.KEYEVENTF_KEYUP, 0)
time.sleep(1)
# 按下回车
win32api.keybd_event(13, 0, 0, 0)
win32api.keybd_event(13, 0, win32con.KEYEVENTF_KEYUP, 0)
time.sleep(10) #需要设置时间长一些,否则时间过短,页面下载不完整
driver.quit()