【问题标题】:Scrape conditional results Python Selenium Webdriver刮取条件结果 Python Selenium Webdriver
【发布时间】:2020-05-20 15:19:25
【问题描述】:

这是我对previous question 的跟进。基本上,我正在尝试从该站点https://brokercheck.finra.org/search/genericsearch/list的搜索结果中刮取所有 CRD#

(您需要在单击链接时重新搜索,只需为Individual 搜索输入一些随机内容)

我正在尝试抓取Disclosure 以获取YesNo,但此框使用ng-if 来显示YesNo,或者对于某些行它甚至不会显示它。

我正在使用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()'")))])

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

谢谢。

【问题讨论】:

    标签: python selenium selenium-webdriver web-scraping


    【解决方案1】:

    在这种情况下,您需要的是依赖于您的文本的 Xpath。

    首先你想得到Disclosures div,然后是它旁边的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 了。因此,基本上,当您遍历每张翻转卡时,您应该运行一些 find element as .//md-card-content/div/div//*[contains(., "Disclosures")] /following-sibling::div[1]/div 来查找卡中公开的值。如果该元素不存在,则表示未指定任何披露

    【讨论】:

      【解决方案2】:

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

      • 使用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_SELECTORhasDisclosures()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
        

      【讨论】:

        猜你喜欢
        • 2021-04-29
        • 1970-01-01
        • 2016-11-19
        • 1970-01-01
        • 1970-01-01
        • 2021-11-24
        • 1970-01-01
        • 2021-10-29
        • 1970-01-01
        相关资源
        最近更新 更多