首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >抓取浏览器控制台输出- Python Selenium - TCF API

抓取浏览器控制台输出- Python Selenium - TCF API
EN

Stack Overflow用户
提问于 2021-03-24 15:22:32
回答 1查看 74关注 0票数 0

我想从实现所谓的Tracking Consent Framework的站点中收集所谓的TC字符串(跟踪同意字符串),以符合GDPR。

在浏览器控制台中,我可以输入如下内容

代码语言:javascript
复制
window.__tcfapi('ping',2,function(data,success){console.log(data);})

接口的说明可以在这里找到TCF API。第三个参数是回调函数,用于将接收到的数据写入控制台。所需的返回值(示例来自focus.de)将是如下所示的字典

代码语言:javascript
复制
{
"cmpId": 6,
"cmpVersion": 1,
"gdprApplies": true,
"tcfPolicyVersion": 2,
"cmpLoaded": true,
"cmpStatus": "loaded",
"displayStatus": "hidden",
"apiVersion": "2",
"gvlVersion": 82}

如何使用Selenium将此控制台输出赋给python中的变量?

我可以尝试使用execute_script-method执行脚本,如下所示:

代码语言:javascript
复制
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方法。但这只会给我带来超时错误。

任何提示都非常感谢,非常感谢。

EN

回答 1

Stack Overflow用户

发布于 2021-03-26 19:44:43

我使用这个变通方法(暂时)解决了这个问题:

代码语言:javascript
复制
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")删除它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66776360

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档