0

这是我上一个问题的后续。基本上,我正在尝试从该站点https://brokercheck.finra.org/search/genericsearch/list的搜索结果中抓取所有 CRD#

(当你点击链接时,你需要重新搜索,只需输入一些随机的东西进行Individual搜索)

我正在尝试抓取Disclosureto get Yesor No,但是此框使用ng-ifto 显示Yesor No,或者对于某些行它甚至不会显示它。

在此处输入图像描述

我正在使用CSS_SELECTOR来选择div. 不过内容ng-if不一样

# No
print([disclosure.get_attribute("innerHTML") for disclosure in WebDriverWait(driver, 10).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "div.ng-scope[ng-if='!vm.item.hasDisclosures() && vm.item.hasDisclosureFlag()'")))])

# Yes
print([disclosure.get_attribute("innerHTML") for disclosure in WebDriverWait(driver, 10).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "div.ng-scope[ng-if='vm.item.hasDisclosures()'")))])

我如何以编程方式处理这种情况?

谢谢。

4

2 回答 2

1

在这种情况下,您想要的是 Xpath,它取决于您的文本。

首先你想得到Disclosuresdiv 然后是它旁边的 div

//div[@class='flipper']//md-card-content/div/div//*[contains(., "Disclosures")]

然后得到下一个 div

//div[@class='flipper']//md-card-content/div/div//*[contains(., "Disclosures")]/following-sibling::div[1]/div

然后你可以得到div。因此,基本上,当您遍历每张翻转卡片时,您应该运行一些查找元素.//md-card-content/div/div//*[contains(., "Disclosures")] /following-sibling::div[1]/div来查找卡片中披露的价值。如果该元素不存在,则表示未指定任何披露

于 2020-05-20T07:16:27.120 回答
1

要使用Selenium打印所有披露值,即YesNo从网站https://brokercheck.finra.org/search/genericsearch/grid中的搜索结果,您必须诱导WebDriverWait并且您可以使用以下任一定位器策略visibility_of_all_elements_located()

  • 使用CSS_SELECTORhasDisclosures()

    print([my_elem.get_attribute("innerHTML") for my_elem in WebDriverWait(driver, 10).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "div.ng-scope[ng-if*='hasDisclosures']")))])
    
  • 使用CSS_SELECTORhasDisclosureFlag()

    print([my_elem.get_attribute("innerHTML") for my_elem in WebDriverWait(driver, 10).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "div.ng-scope[ng-if*='hasDisclosureFlag']")))])
    
  • 使用CSS_SELECTOR,hasDisclosures()hasDisclosureFlag():

    print([my_elem.get_attribute("innerHTML") for my_elem in WebDriverWait(driver, 10).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "div.ng-scope[ng-if*='hasDisclosures'][ng-if*='hasDisclosureFlag']")))])
    
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
于 2020-05-20T07:19:25.303 回答