首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何访问iFrame中的不一致小部件而不出现错误?

如何访问iFrame中的不一致小部件而不出现错误?
EN

Stack Overflow用户
提问于 2019-09-22 12:25:33
回答 1查看 575关注 0票数 1

我在访问selenium的小部件( discord小部件)时遇到了问题。代码有时能工作,有时不能,我需要它保持一致。

这是website

下面是我所关心的iframe源代码:

代码语言:javascript
复制
<iframe id="discordIframe" title="discordIframe" src="https://discordapp.com/widget?id=162891400684371968&amp;
theme=dark" width="100%" height="365" 
allowtransparency="true" frameborder="0">
#document
</iframe>

我需要检查的元素在#document中,尽管我注意到有时#document甚至不会加载,但即使加载了,我的程序仍然找不到所需的元素。

下面是一个完全可重现的代码示例:

代码语言:javascript
复制
import selenium.webdriver as webdriver
import selenium.webdriver.common.by as by
import selenium.webdriver.support.ui as ui
import selenium.webdriver.support.expected_conditions as EC

CHROMEDRIVER_PATH = r'D:\Software\Chromedriver\chromedriver.exe'
browser = webdriver.Chrome(executable_path = CHROMEDRIVER_PATH)

std_wait = ui.WebDriverWait(browser, 10)
extended_wait = ui.WebDriverWait(browser, 30)
iframe_wait = ui.WebDriverWait(browser, 90)

print("Visiting Discord....")
browser.get(r"https://slayersclub.bethesda.net/en/#")
leaderboard = std_wait.until(EC.presence_of_element_located((by.By.CSS_SELECTOR, "div[class = 'module top-contributors']"))
                    )
browser.execute_script("arguments[0].scrollIntoView();", leaderboard)
iframes = extended_wait.until(EC.presence_of_all_elements_located((by.By.CSS_SELECTOR, "div[class = 'frame frame--padding']"))
                            )
iframes[1].click()
discordframe = iframe_wait.until(EC.presence_of_element_located((by.By.CLASS_NAME, "discordIframe"))
                                    )
browser.switch_to.frame(discordframe)
extended_wait.until(EC.presence_of_element_located((by.By.CLASS_NAME, "widgetBtnConnect-2fvtGa"))
                    ).click()

正如我所注意到的,在几乎所有的wait代码部分中都有可能得到错误代码。但在discordIframewidgetBtnConnect-2fvtGa部分更是如此。即使我可以清楚地看到一切都已经加载,程序仍然在等待,最终抛出错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-22 13:35:13

要访问Iframe中的项目,请编写以下代码:

代码语言:javascript
复制
WebDriverWait(driver,20).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"#discordIframe")))

要再次切换,请编写此代码

代码语言:javascript
复制
browser.switch_to_default_content()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58046032

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档