如何使用Selenium和Python从html中删除文本Alpha Esports

问题描述 投票:0回答:2

我最近一直在进行一项改善编程的个人项目。我对Python比较陌生。

我想要做的是从网站上抓取一些数据(约100-200项)。我已经设法为某些元素而不是其他元素。我试图提取的文字是'Alpha Esports',但是selenium似乎无法识别出这个类名。

<span ng-class="$ctrl.className"> Alpha Esports </span>

我相信$ ctrl与angularjs有关。 span标记包含在div标记中,如下所示:

<div class="ui-scoreboard-coupon-template__content--vertical-container"> <!----><div class="ui-scoreboard-coupon-template__content--vertical-aligner" ng-if="!$ctrl.viewModel.isAmericanEvent"> <div> <!----><div class="ui-scoreboard-coupon-template__cell__spacer" ng-if="!$ctrl.viewModel.inPlay"></div><!----> <!----> <div class="ui-scoreboard-coupon-template__cell"> <ui-scoreboard-runner class="ui-scoreboard-runner ui-scoreboard-runner__home" name="$ctrl.viewModel.home">
<span ng-class="$ctrl.className"> Alpha Esports </span> </ui-scoreboard-runner> </div> </div> <div class="ui-scoreboard-coupon-template__row__space"></div> <div> <!----><div class="ui-scoreboard-coupon-template__cell__spacer" ng-if="!$ctrl.viewModel.inPlay"></div><!----> <!----> <div class="ui-scoreboard-coupon-template__cell"> <ui-scoreboard-runner class="ui-scoreboard-runner ui-scoreboard-runner__away" name="$ctrl.viewModel.away">
<span ng-class="$ctrl.className"> G-Rex </span> </ui-scoreboard-runner> </div> </div> </div><!----> <!----> </div>

我已经考虑过使用xpath,但每个数据块都有所不同,我不知道如何制作“动态”xpath。当我尝试使用父标记的类名时,它不返回任何元素。我已经尝试了上面代码摘录中出现的所有类名。

teams = []
teams = driver.find_elements_by_class_name("ui-scoreboard-coupon-template__content--vertical-container")

最后,我认为$ ctrl可能已经初始化为代码中的早期内容,但这是它的第一次使用:

<div class="collapsed-header collapsed-header--show" ng-show="$ctrl.showCollapsedHeader" ng-class="{'collapsed-header--show': $ctrl.showCollapsedHeader}">
    <div class="frame-layout">
        <div class="left-hand-side">
            <a class="collapsed-header__logo" ng-href="/bet" href="/bet">
              <svg class="collapsed-header__img">
                  <use xlink:href="sprite_9c5b742d050f5c4b58fe55f82f78c576.svg#logos-header_logo-usage"></use>
              </svg>
            </a>
        </div>
        <div class="center"></div>
        <div class="right-hand-side"></div>
    </div>
</div>

任何有关研究/阅读内容的提示都会非常受欢迎,因为我对angularjs概念和selenium实现有点不知所措。

angularjs python-3.x selenium xpath css-selectors
2个回答
0
投票

我尝试过使用XPath并且它有效。请尝试告诉我。

print(driver.find_element_by_xpath("//ui-scoreboard-runner[@class='ui-scoreboard-runner ui-scoreboard-runner__home']/span").text)

0
投票

要提取文本Alpha Esports,因为元素是Angular元素,您必须引入WebDriverWait以查看元素的可见性,您可以使用以下任一解决方案:

  • CSS_SELECTORmyText = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.ui-scoreboard-coupon-template__content--vertical-aligner div:nth-child(2) ui-scoreboard-runner.ui-scoreboard-runner.ui-scoreboard-runner__home>span[ng-class]"))).get_attribute("innerHTML")
  • XPATHmyText = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[@class='ui-scoreboard-coupon-template__content--vertical-aligner']//following::div[2]//ui-scoreboard-runner[@class='ui-scoreboard-runner ui-scoreboard-runner__home']/span[@ng-class]"))).get_attribute("innerHTML")
  • 注意:您必须添加以下导入: from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
© www.soinside.com 2019 - 2024. All rights reserved.