我正在尝试抓取连接后立即请求同意的特定服务器。一旦我手动单击“我同意”,一切正常。但我想自动化整个过程,包括最初的同意点击。为此,我需要找到要使用 selenium 单击的按钮 - 但我在页面源代码中找不到相应的元素。任何帮助将非常感激。
代码:
from selenium import webdriver
url = 'https://www.sreality.cz/'
driver = webdriver.Firefox()
driver.get(url)
print(driver.page_source)
输出:
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Seznam.cz Consent</title>
<script src="//h.seznam.cz/js/dot-small.js"></script>
<script src="//h.seznam.cz/js/cmp2/scmp-consent.js"></script>
<style>
body {
height: 100%;
margin: 0;
overflow: hidden;
}
div.scmp.scmp_Dialog-wrapper {
background: none !important;
}
div.scmp_dialog-overlay {
background-color: unset;
}
iframe#bg-iframe {
height: 100vh;
width: 100vw;
pointer-events: none;
-webkit-filter: blur(5px);
filter: blur(5px);
}
</style>
<style id="scmp-noscroll">.scmp-noscroll { height: 100vh; height: -webkit-fill-available; margin: 0; overflow: hidden; }</style></head>
<body class="scmp-noscroll">
<script>
var backURLName = '$backUrl';
function getCookie (cName) {
var name = cName + '=';
var cookies = decodeURIComponent(document.cookie);
var allCookies = cookies.split(';');
var len = allCookies.length;
for (var i = 0; i < len; i++) {
var c = allCookies[i];
while (c.charAt(0) === ' ') {
c = c.substring(1);
}
if (c.indexOf(name) === 0) {
return c.substring(name.length);
}
}
return null;
}
var backURL = getCookie(backURLName);
if (backURL) {
var iframe = document.createElement('iframe');
iframe.setAttribute('src', backURL);
iframe.setAttribute('id', 'bg-iframe');
iframe.setAttribute('sandbox', '');
iframe.setAttribute('frameborder', '0');
document.body.appendChild(iframe);
}
</script>
<iframe src="https://h.seznam.cz/html/cmp.html?v=2.292.0" style="border: 0px none; display: none;"></iframe><div class="szn-cmp-dialog-container" style="margin: unset; padding: unset; width: unset; height: 100%;"></div></body></html>
查看页面,同意弹出窗口似乎是一个影子 DOM 元素,隐藏在最后一个 div 中。
这是一个相关问题: 如何使用 selenium 自动化影子 DOM 元素?