我在Chrome 77上的网站无法加载任何数据,但在Chrome 76上可以正常运行

时间:2019-09-11 19:29:01

标签: google-chrome selenium-chromedriver webdriver-io dompurify trusted-types

更糟糕的是,我的测试通过Chrome 77和Chromedriver 77通过(测试通过,数据加载在网页中,等等)。仅当我手动启动Chrome 77浏览器并测试它是否失败时。

这基本上是我的代码正在做的事情:

import pytesseract

pytesseract.pytesseract.tesseract_cmd = 'C:/Program Files (x86)/Tesseract-OCR/ tesseract.exe'

from PIL import Image
value=Image.open("C://Profile_tess.png")

text = pytesseract.image_to_string(value)    
print("text present in images:",text)

问题是在Chrome 77 // Get the query parameter "operation" from the URL let match = new RegExp("[?&]operation=([^&]*)").exec(window.location.search); let param = match && decodeURIComponent(match[1].replace(/\+/g, " ")); // Sanitize the URL from XSS Injection let param = param ? window.DOMPurify.sanitize(param) : param; if(param === "View") { // Load data from the server } 中是错误的!但是单独使用Chrome 77并非没有错。

1 个答案:

答案 0 :(得分:3)

我知道了!问题是Chrome 77默认情况下会启用TrustedTypes API。但是,如果通过Chromedriver启动Chrome 77会关闭它,这是一个不错的nasty bug

使Chrome 77 / Chromedriver 77像手动点击页面时一样失败的解决方法是启用此Chrome功能:

--enable-blink-features=TrustedDOMTypes

您将其放在与--no-sandbox--disable-infobars相同的位置。

太好了!现在,您的测试会按预期失败。接下来,要纠正错误,请更改此行:

// Sanitize the URL from XSS Injection
let param = param ? window.DOMPurify.sanitize(param) : param;

为此:

// Sanitize the URL from XSS Injection
let param = param ? (window.DOMPurify.sanitize(param) || "").toString() : param;

toString()是最重要的部分。现在将返回TrustedType对象,而不是String。