首页 > 解决方案 > 在 python 中通过 selenium 打开 chrome 时,HTML 页面似乎添加了 iframe 元素

问题描述

我是 selenium 和 web 自动化任务的新手,我正在尝试使用 chromedriver 编写一个用于在 PubMed 上自动搜索论文的应用程序。

我的目标是单击 PubMed 主页https://www.ncbi.nlm.nih.gov/pubmed右上角的“登录”按钮。所以问题是:

["Sign in" inspection][1]

我已经通过以下方式解决了这个问题:

bot = PubMedBot()
bot.driver.get('https://www.ncbi.nlm.nih.gov/pubmed')
sleep(2)
frames = bot.driver.find_elements_by_tag_name('iframe')
bot.driver._switch_to.frame(frames[0])
btn = bot.driver.find_element_by_xpath('/html/body/a')
btn.click()

但我只想了解为什么检查代码与 html 源代码不同,这个<iframe>元素是否真的是凭空出现的,如果是,为什么。

先感谢您。

标签: pythonhtmlseleniumiframeselenium-chromedriver

解决方案


您因同步而面临问题。请找到以下解决方案来解决您的问题:

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

driver = webdriver.Chrome(executable_path=r"path ofchromedriver.exe")
driver.maximize_window()
wait = WebDriverWait(driver, 10)
driver.get("https://www.ncbi.nlm.nih.gov/pubmed")
iframe = wait.until(EC.presence_of_element_located((By.TAG_NAME, "iframe")))
driver.switch_to.frame(iframe)
wait.until(EC.element_to_be_clickable((By.XPATH, "//a[contains(text(), 'Sign in to NCBI')]"))).click()

输出:

在此处输入图像描述

检查元素:

在此处输入图像描述


推荐阅读