硒“ .text”不返回连字符值

时间:2019-06-26 02:12:45

标签: python selenium

我正在尝试从一个汇总的网站上收集有关赌博赔率的数据。有时,网站上的体育博彩源中没有特定游戏的赔率,因此汇总的网站显示破折号或连字符(“-”)。我的搜寻器将此连字符值返回为空,这使我的for循环搞砸了。

当我抓紧时间时,如果有可能,我的代码可以正常工作。如果不存在赔率,并且网站显示“-”,则响应为空。我尝试使用.text.get_attribute("innerText"),但找不到其他可以返回文本的方法。

这是有效的元素:

<section class="_2NFWr" data-vertical-sbid="279" style="">
    <main class="_2ZO4X">
        <div class="_3h0tU _3ptK- _1qU_1">
            <span class="_3YgRM _1QEDd">
                <span class="">+145</span>
            </span>
        </div>
        <div class="_3h0tU _3ptK- _1qU_1 _1YNCg">
            <span class="_3YgRM _1QEDd">
                <span class="">-155</span>
            </span>
        </div>
    </main>
</section>

我的代码:

away_odds = odds_element.find_element_by_css_selector('div._3h0tU._3ptK-._1qU_1')
away_odds = away_odds.text

home_odds = odds_element.find_element_by_css_selector('div._3h0tU._3ptK-._1qU_1._1YNCg')
home_odds = home_odds.text

print "Away Odds: "+ away_odds
print "Home Odds: "+ home_odds

返回:

Away Odds: +145
Home Odds: -155

这是无效的部分

    <section class="_2NFWr" data-vertical-sbid="1602" style="">
        <main class="_2ZO4X">
            <div class="_3h0tU _3ptK-">
                <span class="_3YgRM _1QEDd">
                    <span class="">-</span>
                </span>
            </div>
            <div class="_3h0tU _3ptK- _1YNCg">
                <span class="_3YgRM _1QEDd">
                    <span class="">-</span>
                </span>
            </div>
        </main>
    </section>

我的代码相同,并且响应为空。这会中断我用来与页面进行交互的while循环,并过早停止它。

我也尝试了以下方法:

从嵌套类中抓取

away_odds = odds_element.find_element_by_css_selector('div._3h0tU._3ptK-._1qU_1')
away_odds = away_odds.find_element_by_css_selector('span._3YgRM._1QEDd')
away_odds = away_odds.text

home_odds = odds_element.find_element_by_css_selector('div._3h0tU._3ptK-._1qU_1._1YNCg')
home_odds = home_odds.find_element_by_css_selector('span._3YgRM._1QEDd')
home_odds = home_odds.text

并使用Inner Text属性

away_odds = odds_element.find_element_by_css_selector('div._3h0tU._3ptK-._1qU_1')
away_odds = away_odds.get_attribute('innerText')

home_odds = odds_element.find_element_by_css_selector('div._3h0tU._3ptK-._1qU_1._1YNCg')
home_odds = home_odds.get_attribute('innerText')

在这两种情况下,我仍然从代码中的“-”中得到一个空值

我希望代码输出文本值“-”

2 个答案:

答案 0 :(得分:0)

away_odds = odds_element.find_element_by_css_selector('div._3h0tU._3ptK-._1qU_1')

不同

away_odds = odds_element.find_element_by_css_selector('_3h0tU _3ptK- _1YNCg')

away_odds = odds_element.find_element_by_css_selector('_3YgRM _1QEDd')

我的建议是,您首先分析网站中的模式,然后获取值。

例如,执行此操作

parent_list=driver.find_elements_by_class('name of main class')
child1=parent_list[0].find_elements_by_class('name of inner class')
grand_child= ____same thing follows___

明智地使用find_elements_by。您可以在最恶劣的动态环境中使用XPath和CSS Selector。

答案 1 :(得分:0)

看起来赔率包裹在<span class="_3YgRM _1QEDd">元素中。您可以使用find_elements_by_css_selector来获取列表。

例如(假设上面的HTML在your_local.html中:

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("file:///C:/your_local.html")

away_odds = driver.find_elements_by_css_selector('span._3YgRM._1QEDd')

for element in away_odds:
    print(element.text)

#=> +145
#=> -155
#=> -
#=> -