python - 无法使用 selenium webdriver 访问 iframe 元素
问题描述
我正在尝试访问mail.com同意页面上的按钮元素。
该页面的 URL 可以在这里看到https://www.mail.com/consentpage。
如果您已经访问过该站点,则可以在隐身选项卡中查看同意页面。
抱歉,我不确定是否应该在此处发布链接或完整的 html。
我正在尝试使用以下标签访问按钮
<button id="onetrust-accept-btn-handler" tabindex="0">Agree and continue</button>
我尝试访问的按钮上方似乎有多个 iframe 帖子
到目前为止我的代码:
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.keys import Keys
from time import sleep
driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get("http:mail.com")
sleep(3)
try:
iframe = driver.find_elements_by_tag_name('iframe')[o]
driver.switch_to.frame(iframe)
button = iframe.find_element_by_id('onetrust-accept-btn-handler')
#driver.switch_to_default_content()
driver.quit()
except:
print('error')
driver.quit()
访问 iframe 似乎可以工作,但之后我无法访问按钮元素。
我已经按照其他帖子的建议提出了这个问题,但不幸的是似乎无法让它发挥作用。谢谢你的帮助!
解决方案
你遇到了一个棘手的问题。
你有iframe
s within iframe
s 由 javascript 加载。您需要打几个电话,并且需要等待元素可用。您还粘贴了需要解决的代码错误。
解决您的所有问题-这对我有用...
添加更多导入:
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
然后运行这个:
#updated your URL as your pasted URL wasn't valid
driver.get("https://www.mail.com/consentpage")
#Get iframe 1 - this updates DRIVER to be within that iframe
WebDriverWait(driver, 30).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR, ".permission-core-iframe")))
#get iframe 2 - this can only be found when driver is inside the first iframe
WebDriverWait(driver, 30).until(EC.frame_to_be_available_and_switch_to_it((By.TAG_NAME, "iframe")))
#Wait for the button to fully load
button = WebDriverWait(driver, 30).until(EC.element_to_be_clickable((By.ID, "onetrust-accept-btn-handler")))
#click it
button.click()
继续前进 - 对您的提示是调试代码。如果它没有按预期工作,则需要捕获并公开完整错误,或者更简单地删除try
. 您的try
输出只是说“错误”-隐藏了实际出错的任何内容。它产生的实际错误消息会告诉您问题所在。
推荐阅读
- windows - 为什么 Pycharm 有橙色文件?
- alexa - 无法将 Alexa Skill 导入 Dialogflow
- php - Wordpress wp_query 在一个查询中从两个类别中获取两个最后插入的帖子
- android - 所有风味现在都必须属于一个命名的风味维度 Android Studio NDK
- google-apps-script - 当新数据添加到另一个单元格时,如何自动填充当前日期?
- javascript - 与 console.log 相比,dist() 返回不同的结果
- linux - Bash - 使用用户输入打破 while 循环
- java - 为改造 POST 请求创建 JSON 正文参数
- apache-spark - 使用 Pyspark 文件进行 Spark-Submit。
- javascript - 使用 PHP curl 上传图片