【发布时间】:2020-07-25 00:55:02
【问题描述】:
我是 Selenium 和网络自动化任务的新手,我正在尝试使用 chromedriver 编写一个用于在 PubMed 上自动搜索论文的应用程序。
我的目标是点击 PubMed 主页右上角的“登录”按钮,https://www.ncbi.nlm.nih.gov/pubmed。所以问题是:
当我手动打开 PubMed 主页时,html 源代码中没有 iframes 标签,因此“登录”元素应该可以通过其 xpath
"//*[@id="sign_in"]"轻松访问。当同一页面由 selenium 打开时,我无法通过其 xpath 找到“登录”元素,如果尝试检查它,html 源似乎已将其嵌入到
<iframe>标记中,因此除非执行driver._switch_to.frame方法,否则无法再找到它。但是如果我通过Ctrl+U打开html源代码并搜索<iframe>元素,仍然没有。这是“登录”元素检查捕获:
["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>元素是否真的是凭空出现的,如果是,为什么。
提前谢谢你。
【问题讨论】:
标签: python html selenium iframe selenium-chromedriver