Как взаимодействовать с теневым DOM диспетчера согласия Transcend с помощью Selenium?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как взаимодействовать с теневым DOM диспетчера согласия Transcend с помощью Selenium?

Сообщение Anonymous »

Я пытаюсь автоматизировать взаимодействие с диалоговым окном согласия на конфиденциальность на странице GoFundMe, управляемым Transcend.
URL: https://www.gofundme.com/f/10yr-old-pitt-baby-who-needs -emergency-surgery
В частности, мне необходимо:
  • Отметить флажок «Не продавать/разглашать мою информацию» флажок
  • Нажмите кнопку «Подтвердить».
Элементы находятся внутри теневого DOM, прикрепленного к элементу div с идентификатором. ="transcend-consent-manager".
Вот мой текущий код:

Код: Выделить всё

try:
# Wait for the consent manager to be present
manager = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "transcend-consent-manager"))
)
print("Found consent manager")

# Wait and try to interact using JavaScript
js_code = """
function waitForShadowRoot(callback, maxAttempts = 10) {
let attempts = 0;
const check = () => {
attempts++;
const manager = document.getElementById('transcend-consent-manager');
const root = manager ? manager.shadowRoot : null;
if (root) {
callback(root);
return;
}
if (attempts < maxAttempts) {
setTimeout(check, 1000);
}
};
check();
}

return new Promise((resolve) => {
waitForShadowRoot((root) => {
console.log('Found shadow root');
const checkbox = root.querySelector('input[type="checkbox"]');
if (checkbox) {
checkbox.click();
console.log('Clicked checkbox');

setTimeout(() => {
const button = root.querySelector('button');
if (button) {
button.click();
console.log('Clicked button');
resolve(true);
} else {
resolve(false);
}
}, 1000);
} else {
resolve(false);
}
});
});
"""

print("Executing JavaScript to interact with shadow DOM...")
result = driver.execute_async_script(js_code)

if result:
print("Successfully clicked elements")
return True
else:
print("Failed to find or click elements")
# Print debug info
debug_js = """
const manager = document.getElementById('transcend-consent-manager');
return {
manager: !!manager,
shadowRoot: manager ? !!manager.shadowRoot : false,
innerHTML: manager && manager.shadowRoot ? manager.shadowRoot.innerHTML : 'No content'
}
"""
debug_info = driver.execute_script(debug_js)
print("Debug info:", debug_info)
return False

except Exception as e:
print(f"Error: {str(e)}")
return False

Url: https://www.gofundme.com/f/10yr-old-pitt-baby-who-needs-emergency-surgery
Изображение


Подробнее здесь: https://stackoverflow.com/questions/791 ... g-selenium
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»