【问题标题】:selenium element click not working as expected硒元素点击没有按预期工作
【发布时间】:2016-07-09 09:36:22
【问题描述】:

我试图编写一个自动化脚本来下载一些带有硒的外汇美元/加元价格历史数据。这些数据可在

https://www.dukascopy.com/swiss/english/marketwatch/historical/

我要下载的数据选择烛台选项,1小时,手动选择“勾选”按钮并选择“小时”后,如下所示:

offer side 区域变得可点击。如果我用 selenium 自动化这个过程,代码看起来像:

driver = webdriver.Firefox()
driver.get("https://www.dukascopy.com/swiss/english/marketwatch/historical/")

# wait for the frame to load and switch
wait = WebDriverWait(driver, 20)
iframe = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, ".mainContentBody iframe")))
driver.switch_to.frame(iframe)

for pair in ["USDCAD"]:
    css_selector = "ul > li[data-group][data-instrument='{}/{}']".format(pair[:3], pair[3:])
    li_item = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, css_selector)))
    li_item.click()

    # Set the two options about candlestick
    candle_unit_menu_ele = driver.find_element_by_id(":i")
    candle_unit_menu_ele.click()

    candle_unit_ele = wait.until(EC.visibility_of_element_located((By.ID, ":3"))
    candle_unit_ele.click()

但是,执行此脚本后,您会发现美元/加元按钮被选中,而蜡烛单位未设置为小时,报价方部分也不可用。图片:

我想知道为什么会发生这种情况以及如何获得预期的结果。

非常感谢!

【问题讨论】:

  • 单位设置为什么?
  • 应该设置为小时@YuZhang
  • 您使用的是哪个版本的 Selenium 和 Firefox?我在 Firefox 45.2 和 Selenium 2.52 上。当我运行你的代码时,它可以工作。
  • Firefox 版本为 47.0.1,selenium 版本为 2.53.6。

标签: python selenium web-crawler


【解决方案1】:

编辑:

点击正确的元素可能会出现问题。所以在这行之后:

candle_unit_ele = wait.until(EC.visibility_of_element_located((By.ID, ":3")))

添加:

candle_unit_ele = driver.find_element_by_xpath("//*[@id=':3']/div")

...点击id为:3的div的子div。

所以这两个步骤现在可以是:

# Set the two options about candlestick
candle_unit_menu_ele = driver.find_element_by_id(":i")
candle_unit_menu_ele.click()

candle_unit_ele_parent = wait.until(EC.visibility_of_element_located((By.ID, ":3")))
candle_unit_ele = candle_unit_ele_parent.find_element_by_xpath("//*[@id=':3']/div")
candle_unit_ele.click()

或者:

candle_unit_ele = wait.until(EC.visibility_of_element_located((By.XPATH, "//*[@id=':3']/div")))
candle_unit_ele.click()

顺便说一句,你有一个语法错误:

candle_unit_ele = wait.until(EC.visibility_of_element_located((By.ID, ":3"))

需要一个右括号:

candle_unit_ele = wait.until(EC.visibility_of_element_located((By.ID, ":3")))

此外,虽然不是错误,但 for pair in ["USDCAD"]: 行是不必要的,因为您实际上并没有循环。只需pair = "USDCAD" 就足够了,除非您打算循环使用其他货币选项。但由于它们是单选按钮,因此您最终只会选择循环运行的最后一个。

【讨论】:

  • 好的,我尝试切换到较低版本的 Firefox,但没有成功。然后我尝试切换到 Chrome 成功了
  • 修改了我的答案以单击不同的元素。查看编辑。
【解决方案2】:

我已经尝试过了,它对我有用:

   candle_unit_ele = wait.until(EC.visibility_of_element_located((By.ID, ":3"))
   candle_unit_ele.click()

将上面的代码替换为:

   candle_unit_ele = driver.find_element_by_id(":3")
   candle_unit_ele.click()

【讨论】:

    猜你喜欢
    • 2018-12-18
    • 1970-01-01
    • 1970-01-01
    • 2017-12-10
    • 2023-01-18
    • 1970-01-01
    • 1970-01-01
    • 2017-01-06
    • 1970-01-01
    相关资源
    最近更新 更多