【问题标题】:Unable to locate element in selenium chromedriver even though it exists即使存在,也无法在 selenium chromedriver 中找到元素
【发布时间】:2020-12-30 02:59:03
【问题描述】:

我正在尝试单击thetimes.co.uk 网站上的I Agree 按钮,但是会引发异常,指出找不到元素。

这是我尝试过的:

import time
from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.thetimes.co.uk/")

time.sleep(1)

# Neither one of the below worked:
driver.find_element_by_xpath("/html/body/div/div[3]/div[3]/button[2]").click()
driver.find_element_by_css_selector("body > div > div.message.type-modal > div.message-component.message-row > button:nth-child(3)").click()
driver.find_element_by_css_selector(".message-component.message-button.no-children").click()

是否有任何 cookie 可以发送到网站以禁用弹出窗口或无论如何成功单击 I Agree 按钮?

【问题讨论】:

  • 浏览时按回车,弹窗会消失吗?如果是这样,您可以使用 sendkeys。如果您手动单击一次,它也可能会记住您的同意。
  • 按回车没有解决问题。

标签: python python-3.x selenium selenium-webdriver selenium-chromedriver


【解决方案1】:

您遇到了一个经典的 iframe 问题,“我同意”按钮位于内部 HTML 文档中,您需要先切换到该按钮才能找到该按钮;请参阅下面的代码示例,

import time

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium import webdriver

driver = webdriver.Chrome("./chromedriver")
driver.get("https://www.thetimes.co.uk/")

iframe = (By.CSS_SELECTOR, "#sp_message_iframe_216133")
btn_agree = (By.CSS_SELECTOR, "body > div > div.message.type-modal > div.message-component.message-row > button:nth-child(3)")

iframe_element = WebDriverWait(driver, 10).until(EC.visibility_of_element_located(iframe))
driver.switch_to.frame(iframe_element)
WebDriverWait(driver, 10).until(EC.element_to_be_clickable(btn_agree)).click()

# remember to switch back out
driver.switch_to.default_content()

【讨论】:

    猜你喜欢
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多