Python 如何刮取精确<;的值/文本;td>;在使用selenium选择下拉列表后,是否使用其xpath?

Python 如何刮取精确<;的值/文本;td>;在使用selenium选择下拉列表后,是否使用其xpath?,python,python-2.7,selenium,xpath,automation,Python,Python 2.7,Selenium,Xpath,Automation,我试图从下拉菜单中显示的五天中的每一天的表中提取一个特定值 我需要能够得到一个周期性的基础上每天的结算价值(每周用户将刮五个新的价格)。当前,我的脚本将只检索表中今天发布的值 我在使用lxml提取xpath时遇到了类似的问题,这就是为什么我认为它一定是javascript的东西,所以我现在正在尝试Selenium。感谢任何帮助或指导 from selenium import webdriver path_to_chromedriver = '/Users/Daniel/Desktop/chro

我试图从下拉菜单中显示的五天中的每一天的表中提取一个特定值

我需要能够得到一个周期性的基础上每天的结算价值(每周用户将刮五个新的价格)。当前,我的脚本将只检索表中今天发布的值

我在使用lxml提取xpath时遇到了类似的问题,这就是为什么我认为它一定是javascript的东西,所以我现在正在尝试Selenium。感谢任何帮助或指导

from selenium import webdriver

path_to_chromedriver = '/Users/Daniel/Desktop/chromedriver' 

driver = webdriver.Chrome(executable_path='C:\Users\Daniel\Desktop\chromedriver\chromedriver.exe')

url = 'http://www.cmegroup.com/trading/energy/crude-oil/light-sweet-crude_quotes_settlements_futures.html'
driver.get(url)

driver.find_element_by_xpath('//*[@id="cmeTradeDate"]/option[2]').click()

driver.implicitly_wait(10)

settle_price = driver.find_element_by_xpath('//*[@id="settlementsFuturesProductTable"]/tbody/tr[1]/td[6]').text

print settle_price

(原油价格-下跌包含五天) 第页需要的值是5月16日的结算价(xpath):


为什么“今日”页面的文本输出是文本,而不是浏览器指向的下拉元素?

要解决这个问题,需要介绍以下几点:

  • 使用和
    .options
    属性获取并迭代下拉选项
  • 选择选项值后,表格将更新。为了捕获它何时完成更新,您需要(嗯,有不同的策略,这只是其中之一)使“处理”微调器/加载器元素不可见
实施:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC


driver = webdriver.Chrome()
wait = WebDriverWait(driver, 10)

url = 'http://www.cmegroup.com/trading/energy/crude-oil/light-sweet-crude_quotes_settlements_futures.html'
driver.get(url)

select = Select(driver.find_element_by_id("cmeTradeDate"))
for option in select.options:
    # selecting a value in the dropdown
    select.select_by_value(option.get_attribute("value"))

    # wait for the table to load
    wait.until(EC.invisibility_of_element_located((By.CSS_SELECTOR, ".cmeProgressPanel")))

    # get the desired price
    selected_price = driver.find_element_by_xpath('//*[@id="settlementsFuturesProductTable"]/tbody/tr[1]/td[6]')
    print(option.text, selected_price.text)
印刷品:

(u'Friday, 15 Apr 2016 (Final)', u'40.36')
(u'Thursday, 14 Apr 2016 (Final)', u'41.50')
(u'Wednesday, 13 Apr 2016 (Final)', u'41.76')
(u'Tuesday, 12 Apr 2016 (Final)', u'42.17')
(u'Monday, 11 Apr 2016 (Final)', u'40.36')

要解决此问题,需要介绍以下几点:

  • 使用和
    .options
    属性获取并迭代下拉选项
  • 选择选项值后,表格将更新。为了捕获它何时完成更新,您需要(嗯,有不同的策略,这只是其中之一)使“处理”微调器/加载器元素不可见
实施:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC


driver = webdriver.Chrome()
wait = WebDriverWait(driver, 10)

url = 'http://www.cmegroup.com/trading/energy/crude-oil/light-sweet-crude_quotes_settlements_futures.html'
driver.get(url)

select = Select(driver.find_element_by_id("cmeTradeDate"))
for option in select.options:
    # selecting a value in the dropdown
    select.select_by_value(option.get_attribute("value"))

    # wait for the table to load
    wait.until(EC.invisibility_of_element_located((By.CSS_SELECTOR, ".cmeProgressPanel")))

    # get the desired price
    selected_price = driver.find_element_by_xpath('//*[@id="settlementsFuturesProductTable"]/tbody/tr[1]/td[6]')
    print(option.text, selected_price.text)
印刷品:

(u'Friday, 15 Apr 2016 (Final)', u'40.36')
(u'Thursday, 14 Apr 2016 (Final)', u'41.50')
(u'Wednesday, 13 Apr 2016 (Final)', u'41.76')
(u'Tuesday, 12 Apr 2016 (Final)', u'42.17')
(u'Monday, 11 Apr 2016 (Final)', u'40.36')

啊哈!谢谢你的帮助,等待的链接非常有用和清晰。我很欣赏你的洞察力。啊哈!谢谢你的帮助,等待的链接非常有用和清晰。我很欣赏这种洞察力。