如何解决无论使用硒的方法如何,都无法可靠地选择元素
我正在尝试选择[此网页](https://www.dukascopy.com/swiss/english/marketwatch/historical/)上的“专业”按钮
我能够切换到包含该元素的iframe,但是尝试通过使用元素的xpath,id或类名进行单击,都会导致在同一列中选择看似随机的按钮。下面是我正在使用的当前代码以及检查按钮的屏幕截图。
majorforexbutton = driver.find_element_by_xpath('/html/body/div[9]/div[1]/div[3]/ul/li[4]')
majorforexbutton.click()
屏幕截图:
解决方法
带有 Majors 字段的文本元素位于<iframe>
之内,因此您必须:
-
诱导WebDriverWait使所需的帧可用并切换到。
-
引出WebDriverWait以使所需的元素可点击。
-
您可以使用以下任一Locator Strategies:
-
使用
CSS_SELECTOR
:driver.get('https://www.dukascopy.com/swiss/english/marketwatch/historical/') WebDriverWait(driver,20).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe[src*='freeserv.dukascopy.com/2.0/?path=historical_data_feed']"))) driver.execute_script("return arguments[0].scrollIntoView(true);",WebDriverWait(driver,20).until(EC.visibility_of_element_located((By.XPATH,"//div[text()='Instrument']")))) WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.CSS_SELECTOR,"li[data-group='FX_MAJORS'][data-parent='FX']"))).click()
-
使用
XPATH
:driver.get('https://www.dukascopy.com/swiss/english/marketwatch/historical/') WebDriverWait(driver,10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[contains(@src,'freeserv.dukascopy.com/2.0/?path=historical_data_feed')]"))) driver.execute_script("return arguments[0].scrollIntoView(true);",20).until(EC.element_to_be_clickable((By.XPATH,"//li[text()='Majors']"))).click()
-
-
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
-
浏览器快照:
参考
您可以在以下位置找到一些相关的讨论
,尝试抓住您的元素,然后尝试任何一个底部。
for ( int i = 2 ; i <= Math.sqrt(num) ; i++ )
其中1个:
elem = WebDriverWait(driver,20).until(
EC.element_to_be_clickable((By.ID,":5x")))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。