0%

Python Selenium Chrome 控制Devtools 一些线索

  1. Chrome WebDriver下载地址:http://chromedriver.storage.googleapis.com/index.html
    注意和国产浏览器的内核版本对应(星愿浏览器80.0.3987.163内核可以使用80.0.3987.106的webdriver)
    只要浏览器的内核版本不低于WebDriver的版本即可。Nuget上的最低版本是71的,所以QQ浏览器无法使用C#控制,QQ只有版本70的内核。
  2. 如果要先开浏览器再用Selenium控制的话,需要给浏览器添加启动参数:
1
twinkstar.exe --remote-debugging-port=9222
  1. Python调用现有星愿浏览器的初始化
1
2
3
4
from selenium import webdriver
options = webdriver.ChromeOptions()
options.debugger_address = "127.0.0.1:9222"
driver = webdriver.Chrome(options=options)
  1. 使用Devtools内建的截图功能!(内核59开始支持,详见https://developers.google.com/web/updates/2017/04/devtools-release-notes
1
2
3
4
5
6
import base64
res = driver.execute_cdp_cmd('Page.captureScreenshot', {})

with open('hao123.png', 'wb') as f:
img = base64.b64decode(res['data'])
f.write(img)
  1. Flash缩放的JS原生方法是Zoom(percentage),其中percentage是放大倍率的倒数乘以100,例如放大4倍就是1/4*100=25。
  2. Flash缩放之后,移动视野的JS原生方法是Pan(x_position,y_position,mode)
  • x_position参数是移动横坐标数,可以给负值
  • y_position参数是移动纵坐标数,可以给负值
  • mode参数暂时不清楚,先填1 表示表示坐标的单位,但其值为“0”时,以象数为单位,为“1”时,以百分比为单位。
  1. 设置模拟设备的CDP命令是
1
2
3
4
5
6
'Emulation.setDeviceMetricsOverride', {
mobile: true,
width: 412,
height: 732,
deviceScaleFactor: 2.625,
}
  1. Python Selenium指定截取区域的命令是
1
2
clip = driver.execute_script('return {x: 0, y: 0, width: 4320, height: 7680, scale: 1};', '') # 模拟的是竖屏
res = driver.execute_cdp_cmd('Page.captureScreenshot', {'clip': clip})
  1. 综上,Python需要执行的操作有(截小花仙页游选人界面的高清图(正中间那个))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
from selenium import webdriver
import base64

# 接入既有的浏览器进程
options = webdriver.ChromeOptions()
options.debugger_address = "127.0.0.1:9222"
driver = webdriver.Chrome(options=options)

# 直接开启设备模拟,不要再手动开devtools了,否则截图截的是devtools的界面!
driver.execute_cdp_cmd('Emulation.setDeviceMetricsOverride', {'mobile':False, 'width':4320, 'height':7680, 'deviceScaleFactor': 1})
# 缩放Flash
driver.execute_script('document.getElementsByTagName("embed")[0].Zoom(100)')
driver.execute_script('document.getElementsByTagName("embed")[0].Zoom(25)')
# Flash缩放后的视野位置微调,还需要完善
driver.execute_script('document.getElementsByTagName("embed")[0].Pan(0,-300,0)')
# 执行截图
res = driver.execute_cdp_cmd('Page.captureScreenshot', { 'fromSurface': True})
# 返回的base64内容写入PNG文件
with open('hao123.png', 'wb') as f:
img = base64.b64decode(res['data'])
f.write(img)

# 关闭设备模拟
driver.execute_cdp_cmd('Emulation.clearDeviceMetricsOverride', {})
# Flash缩放复原
driver.execute_script('document.getElementsByTagName("embed")[0].Zoom(500)')
Buy me a coffee
No.5972 Alipay

Alipay

推进创文常态化 共建文明襄阳城 · 🄽🄾5️⃣9️⃣7️⃣2️⃣ · 做文明襄阳人 建文明襄阳城 凝聚文明正能量 筑梦千年古襄阳 · 🄽🄾5️⃣9️⃣7️⃣2️⃣ · 创建全国文明城市 加快建设汉江流域中心城市 · 🄽🄾5️⃣9️⃣7️⃣2️⃣ · 讲文明 树新风 · 🄽🄾5️⃣9️⃣7️⃣2️⃣ · 用微笑融化陌生 用文明美化襄阳 · 🄽🄾5️⃣9️⃣7️⃣2️⃣ · 争当文明使者 播撒文明新风