如何单击一个我看不到它的元素的硒框?

Posted

技术标签:

【中文标题】如何单击一个我看不到它的元素的硒框?【英文标题】:How to click a box with selenium which i can't see its element? 【发布时间】:2022-01-21 09:07:20 【问题描述】:

我想将 fxblue 技术分析中的帧时间从 1h(默认值)更改为 5m,但我无法单击其弹出按钮。 这是我尝试过的代码:

import pandas as pd
import numpy as np
import csv
import os
from selenium import webdriver
driver = webdriver.Chrome(os.getcwd() + '/chromedriver')  
url = "https://www.fxblue.com/market-data/technical-analysis/EURUSD"
driver.get(url)
time.sleep(5)
timestamp = driver.find_element_by_xpath('//*[@id="TimeframeContainer"]').click()

此时我可以看到带有时间范围的弹出窗口,但我找不到更改时间范围的方法。

【问题讨论】:

【参考方案1】:

Timeframe 弹出窗口中的元素位于 iframe 中。需要switch to frame与其中包含的元素进行交互。

# Imports required
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver.get("https://www.fxblue.com/market-data/technical-analysis/EURUSD")

wait = WebDriverWait(driver,30)

# Click on timestamp button.
timestamp = wait.until(EC.element_to_be_clickable((By.ID,"txtTimeframe")))
timestamp.click()

# Switch to iframe.
wait.until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[contains(@class,'DialogInnerIframe')]")))

# click on M5 button.
fivemin = wait.until(EC.element_to_be_clickable((By.XPATH,"//div[@class='TimeframeItem' and text()='M5']")))
fivemin.click()

# Switch to default content to interact with other elements.
driver.switch_to.default_content()

【讨论】:

【参考方案2】:

单击该元素会打开一个对话框。 因此,您需要在该对话框中选择并单击所需的元素。 该对话框位于 iframe 中,您必须切换到该 iframe。 选择所需选项并关闭对话框后,您必须从 iframe 切换回默认内容。 此外,您应该使用显式等待而不是硬编码暂停。 你的代码可能是这样的

import pandas as pd
import numpy as np
import csv
import os
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome(os.getcwd() + '/chromedriver')  
wait = WebDriverWait(driver, 20)

url = "https://www.fxblue.com/market-data/technical-analysis/EURUSD"
driver.get(url)
wait.until(EC.visibility_of_element_located((By.ID, "TimeframeContainer"))).click()
wait.until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe.DialogDragBar")))
driver.find_element_by_xpath("//div[@tf='300']").click()
driver.switch_to.default_content()

【讨论】:

以上是关于如何单击一个我看不到它的元素的硒框?的主要内容,如果未能解决你的问题,请参考以下文章

使用Python中的硒,单击网页上的“下一步”按钮

提交元素不可点击的硒python

无论如何要防止快速单击时Chrome中元素的蓝色突出显示?

android-如何从标记位图开始共享元素过渡?

让 Selenium 单击 Instagram 关注者按钮会引发错误“找不到元素”

使用python的不可靠的硒webdriver单击