我最近一直在进行一个个人项目来改善我的编程。我是Python的新手。
我想做的是从网站上抓取一些数据(大约100-200个项目)。我已经为某些元素做到了,但没有其他。我要提取的文字是“ Alpha Esports”,但是硒似乎无法识别该类名称。
<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概念和硒的实现有点不知所措,因此任何有关研究/阅读内容的技巧都将得到广泛赞誉。
答案 0 :(得分:0)
我尝试使用XPath
并成功。请尝试让我知道。
print(driver.find_element_by_xpath("//ui-scoreboard-runner[@class='ui-scoreboard-runner ui-scoreboard-runner__home']/span").text)
答案 1 :(得分:0)
要提取文本 Alpha Esports ,由于该元素是Angular元素,因此必须为所定位元素的可见性诱导 WebDriverWait ,您可以使用以下任一解决方案:
CSS_SELECTOR
:
myText = 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")
XPATH
:
myText = 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