Selenium遇到的问题5 键盘操作无响应,下载win32出错
Selenium遇到的问题5 键盘操作无响应,下载win32出错
在使用selenium爬取网页图片的时候,想要点击鼠标右键,用键盘操作(Shift+‘v’)保存图片
#鼠标悬停在第一个图片上模拟鼠标右键点击保存 element = driver.find_element_by_css_selector("img.guess-image") ActionChains(driver).context_click(element).perform() time.sleep(3) #control+v 图片另存为 ActionChains(driver).send_keys(Keys.SHIFT, 'v').perform() time.sleep(2) #保存 ActionChains(driver).send_keys(Keys.ENTER).perform()
没有响应。
键盘操作改了好几遍:
ActionChain(driver).key_down(Keys.SHIFT).send_keys('v').key_up(Keys.SHIFT).perform()
也不行。
然后搜到可以用win32库,从下面链接下载对应的版本:
https://sourceforge.net/projects/pywin32/files/pywin32/
安装pywin32的时候出现下面的问题:
Python version 2.7 required, which was not found in the registry
在注册表中没有找到python 2.7
解决方案:建立一个文件 register.py 内容如下. 然后执行该脚本。
- import sys
- from _winreg import *
- # tweak as necessary
- version = sys.version[:3]
- installpath = sys.prefix
- regpath = "SOFTWARE\\Python\\Pythoncore\\%s\\" % (version)
- installkey = "InstallPath"
- pythonkey = "PythonPath"
- pythonpath = "%s;%s\\Lib\\;%s\\DLLs\\" % (
- installpath, installpath, installpath
- )
- def RegisterPy():
- try:
- reg = OpenKey(HKEY_CURRENT_USER, regpath)
- except EnvironmentError as e:
- try:
- reg = CreateKey(HKEY_CURRENT_USER, regpath)
- SetValue(reg, installkey, REG_SZ, installpath)
- SetValue(reg, pythonkey, REG_SZ, pythonpath)
- CloseKey(reg)
- except:
- print "*** Unable to register!"
- return
- print "--- Python", version, "is now registered!"
- return
- if (QueryValue(reg, installkey) == installpath and
- QueryValue(reg, pythonkey) == pythonpath):
- CloseKey(reg)
- print "=== Python", version, "is already registered!"
- return
- CloseKey(reg)
- print "*** Unable to register!"
- print "*** You probably have another Python installation!"
- if __name__ == "__main__":
- RegisterPy()
安装成功后,出现下面的问题
原来我想当然的以为我的python是64位的,下了64位的pywin32,结果不匹配。
后面重新下了个32位的pywin32,就ok了。
操作键盘代码如下:
import win32api
#SHIFT+v
win32api.keybd_event(16, 0, 0, 0) win32api.keybd_event(86, 0, 0, 0)
#Enter按钮 win32api.keybd_event(13, 0, 0, 0)
对应的键码:
有关win32api的网站参考:
http://nullege.com/codes/search?cq=win32api