我最近一直在进行一项改善编程的个人项目。我对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实现有点不知所措。
我尝试过使用XPath
并且它有效。请尝试告诉我。
print(driver.find_element_by_xpath("//ui-scoreboard-runner[@class='ui-scoreboard-runner ui-scoreboard-runner__home']/span").text)
要提取文本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