从网页下载文件显示文件损害计算机的解决方案

  • 现象:
    从网页下载文件显示文件损害计算机的解决方案_第1张图片

  • 解决方案:

到谷歌浏览器的【下载内容】页面选择文件是否保留

from selenium import webdriver
import time
import win32con
import win32api


br.get('chrome://downloads/')
js = "return document.querySelector('downloads-manager').shadowRoot.querySelector('#frb0')" \
     ".shadowRoot.querySelector('#dangerous').querySelector('div[role=gridcell]:nth-child(2)>cr-button')"
a = br.execute_script(js)
a.click()
time.sleep(1)
win32api.keybd_event(0x28, 0, 0, 0)
win32api.keybd_event(0x28, 0, win32con.KEYEVENTF_KEYUP, 0)
time.sleep(1)
win32api.keybd_event(0x0D, 0, 0, 0)
win32api.keybd_event(0x0D, 0, win32con.KEYEVENTF_KEYUP, 0)

从网页下载文件显示文件损害计算机的解决方案_第2张图片

  • 代码解析:

第29行:跳转到谷歌浏览器的下载内容页面
第30行:使用DOM querySelector()获取DOM元素,不需要额外的JQuery支持,语法类似。获取页面的【保留】元素
第32行:执行JavaScript,返回【保留】按钮对象
第33行:对【保留】对象执行点击操作,弹出系统对话框【确认下载】
第36行:模拟键盘操作,按下键盘上的【DOWN】,使得对话框选中【仍然保留】按钮
第37行:模拟键盘操作,松开键盘上的【DOWN】
第39行:模拟键盘操作,按下键盘上的【ENTER】,模拟点击【仍然保留】按钮
第40行:模拟键盘操作,松开键盘上的【ENTER】
至此即可完成文件的下载保留操作。

  • 注意事项
    【下载内容】页面源码中使用了#shadow-root封装,使用selenium的xpath定位方式无法定位到元素;需借助DOM querySelector()获取元素。
    win32api.keybd_event()传入的键码可以是十进制可以是十六进制,若想操作键盘第二功能键则需要按下shift和功能键,然后再松开shift和功能键
  • 键码值对应关系
按键 十进制键码 十六进制键码
A 65 0x41
B 66 0x42
C 67 0x43
D 68 0x44
E 69 0x45
F 70 0x46
G 71 0x47
H 72 0x48
I 73 0x49
J 74 0x4a
K 75 0x4b
L 76 0x4c
M 77 0x4d
N 78 0x4e
O 79 0x4f
P 80 0x50
Q 81 0x51
R 82 0x52
S 83 0x53
T 84 0x54
U 85 0x55
V 86 0x56
W 87 0x57
X 88 0x58
Y 89 0x59
Z 90 0x5a
0 48 0x30
1 49 0x31
2 50 0x32
3 51 0x33
4 52 0x34
5 53 0x35
6 54 0x36
7 55 0x37
8 56 0x38
9 57 0x39
ENTER 13 0x0d
BackSpace 8 0x08
Tab 9 0x09
Shift 16 0x10
Ctrl 17 0x11
Alt 18 0x12
Left Arrow 37 0x25
Right Arrow 39 0x27
Up Arrow 38 0x26
Down Arrow 40 0x28
Delete 46 0x2e
F1 112 0x70
F2 113 0x71
F3 114 0x72
F4 115 0x73
F5 116 0x74
F6 117 0x75
F7 118 0x76
F8 119 0x77
F9 120 0x78
F10 121 0x79
F11 122 0x7a
F12 123 0x7b

你可能感兴趣的:(从网页下载文件显示文件损害计算机的解决方案)