我想从实现所谓的Tracking Consent Framework的站点中收集所谓的TC字符串(跟踪同意字符串),以符合GDPR。
在浏览器控制台中,我可以输入如下内容
window.__tcfapi('ping',2,function(data,success){console.log(data);})接口的说明可以在这里找到TCF API。第三个参数是回调函数,用于将接收到的数据写入控制台。所需的返回值(示例来自focus.de)将是如下所示的字典
{
"cmpId": 6,
"cmpVersion": 1,
"gdprApplies": true,
"tcfPolicyVersion": 2,
"cmpLoaded": true,
"cmpStatus": "loaded",
"displayStatus": "hidden",
"apiVersion": "2",
"gvlVersion": 82}如何使用Selenium将此控制台输出赋给python中的变量?
我可以尝试使用execute_script-method执行脚本,如下所示:
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
cap = DesiredCapabilities.CHROME
cap["goog:loggingPrefs"] = {"performance": "ALL"}
driver = webdriver.Chrome(desired_capabilities=cap)
driver.execute_script("window.__tcfapi('ping',2,function(data,success){console.log(data);})")然后获取控制台日志,就像这个问题中讨论的那样:Getting console.log output from Chrome with Selenium Python API bindings
然而,这似乎非常低效,我猜测我的问题更多地源于对异步javascript编程的误解。
我还尝试使用execute_async_script方法。但这只会给我带来超时错误。
任何提示都非常感谢,非常感谢。
发布于 2021-03-26 19:44:43
我使用这个变通方法(暂时)解决了这个问题:
tcs = driver.execute_script("window.__tcfapi('ping',2,function(data,success){window.tcs=data;}); return window.tcs")因此,基本上我更改了回调函数,以设置一个全局变量window.tcs,然后可以在使用Selenium的execute_script方法时执行的函数中访问和返回该变量。
我知道设置全局变量不是一个好主意...
但是,您也可以使用driver.execute_script("delete window.tcs")删除它。
https://stackoverflow.com/questions/66776360
复制相似问题