0

我早些时候发布了这个问题,很抱歉重新发布,但我无法弄清楚为什么代码适用于回答的人而不是我。

使用python selenium键入文本后如何从搜索建议中获取值?

我将重新输入问题并使用他发布的代码进行更新。

当您在https://finance.yahoo.com/的搜索栏中输入苹果等内容时,会出现一个搜索建议菜单。

在此处输入图像描述

我试图让它返回该下拉框中值的列表、字典或数据框。

例如

{'AAPL':['Apple Inc.','Equity - NMS','https://finance.yahoo.com/quote/AAPL?p=AAPL&.tsrc=fin-srch'],
 'AAPL.BA':['Apple Inc.','Equity - BUE','https://finance.yahoo.com/quote/AAPL.BA?p=AAPL.BA&.tsrc=fin-srch'],
  .....}

或者

['AAPL','Apple Inc.','Equity - NMS','https://finance.yahoo.com/quote/AAPL?p=AAPL&.tsrc=fin-srch']
['APPL.BA','Apple Inc.','Equity - BUE','https://finance.yahoo.com/quote/AAPL.BA?p=AAPL.BA&.tsrc=fin-srch']

最后一个值是单击链接后的超链接。

之前有人在下面发布了此代码,

from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
import time
import pandas as pd

options=webdriver.ChromeOptions()
options.add_argument('start-maximized')

driver = webdriver.Chrome(executable_path=r'C:\Program Files\chromedriver\chromedriver.exe',options=options)
url = "https://finance.yahoo.com/"
driver.get(url)

WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="yfin-usr-qry"]'))).send_keys('apple')

WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//div//*[contains(text(),'Symbols')]")))
web_elem_list = driver.find_elements_by_xpath(".//div[@data-test='search-assist-input-sugglst']/div/ul[1]/li/div")
results = pd.DataFrame()
for web_elem in web_elem_list:
    suggests=[]
    suggests.append(web_elem.find_element_by_xpath("./div/div").text)
    suggests.append(web_elem.find_element_by_xpath("./div/div/following-sibling::div").text)
    suggests.append(web_elem.find_element_by_xpath("./div/following-sibling::div").text)
    results=results.append(pd.Series(suggests),ignore_index=True)

print(results)

driver.close()

但不断在列表中获取空白值。我不明白为什么,发布的人说代码对他有用,但我尝试了我能想到的一切来解决问题。我认为元素的 xpath 可能不正确。

有人有什么主意吗?

4

1 回答 1

1

当我检查 div 显示为:

<div class="some random code" data-id="search-assist-input-sugglst">

尝试:

.//div[@data-id='search-assist-input-sugglst']/ul[1]/li

我尝试检查它的 data-id 而不是 data-test,以及 ul 之前的额外 div。

在此处输入图像描述

于 2020-05-08T06:54:05.067 回答