【问题标题】:Unable to get the right value of a certain amount from a webpage无法从网页中获取一定数量的正确值
【发布时间】:2018-07-21 19:07:10
【问题描述】:

我在 python 中使用 selenium 编写了一个脚本来获取一定数量的转换值。当将较早的金额放入占位符时,金额会产生转换后的价值。新产生的价值与金额相邻。当我在该占位符中手动输入任何金额时,我会相应地得到一个转换后的值,但是当我以编程方式执行相同操作时,该值保持不变,因此我的刮刀将0 作为值。我怎样才能让它发挥作用?

链接到该网页:weblink

我尝试过的脚本:

from selenium.webdriver import Chrome
from contextlib import closing
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys

with closing(Chrome()) as driver:
    wait = WebDriverWait(driver, 10)
    driver.get("find_the_link_above")
    wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, ".OrderForm_input-box_XkGmi input[name='amount']"))).send_keys(100)
    item = wait.until(EC.presence_of_element_located((By.CLASS_NAME,"OrderForm_total_6EL8d"))).text
    print(item)

当我手动将任何金额放入占位符时,更改如下所示:

但是,当我使用脚本做同样的事情时,它是这样的:

我已经用黑色标记了值,让你知道我的意思。

【问题讨论】:

    标签: python python-3.x selenium selenium-webdriver web-scraping


    【解决方案1】:

    问题是您过早发送值,因此输入金额值后值没有反映。在这里,我正在等待 EUR SPREAD 元素在设置金额值之前加载。您可以使用相同的元素或您选择的任何其他元素,但请确保页面完全加载该对象,然后发送金额值。

    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
    chrome_path = r"path"
    driver = webdriver.Chrome(chrome_path)
    wait = WebDriverWait(driver, 10)
    driver.get("https://www.gdax.com/trade/LTC-EUR")
    wait.until(EC.presence_of_element_located((By.XPATH, "//div[@class='OrderBookPanel_text_33dbp']")))
    wait.until(EC.element_to_be_clickable((By.XPATH, "//input[@name='amount']"))).send_keys(100)
    item = wait.until(EC.presence_of_element_located((By.CLASS_NAME,"OrderForm_total_6EL8d"))).text
    print(item)
    

    希望这能解决您的问题。

    【讨论】:

    • 非常感谢。有效。你能告诉我为什么选择这个课程OrderBookPanel_text_33dbp 来检查可用性吗?因为,如果我选择另一个,我之前所做的就无法获得价值。这门课有一些特别之处。单行解释会非常有帮助。
    • 我观察到的是,如果我们在页面完全加载之前输入金额值,LTC 值并没有反映出来。所以OrderBookPanel_text_33dbp是最后加载的元素,所以我使用了。
    • 如果你不想使用 OrderBookPanel_text_33dbp ,你可以等到第一个网格加载的东西消失。在该验证确保完整的页面加载之前,任何类型的验证都可以。
    • 感谢 Pradeep hebbar 的清晰说明。
    猜你喜欢
    • 1970-01-01
    • 2016-04-24
    • 2022-01-22
    • 2014-11-11
    • 2016-04-01
    • 1970-01-01
    • 2011-03-25
    • 2018-06-01
    • 1970-01-01
    相关资源
    最近更新 更多