带有PhantomJS的Selenium返回WebElement的空文本字符串

时间:2017-09-19 14:40:50

标签: javascript python selenium

我试图从betfair网站上读取足球比赛中的分钟数。我理解我试图阅读的内容和文本是由javascript生成的,所以我试图按如下方式获取:

def _get_time_elapsed_soccer(self, market_id):
    url = self._get_market_betfair_url(market_id)
    self._driver.get(url)

    try:
        time_elapsed_elem = WebDriverWait(self._driver, 10).until(
            EC.presence_of_element_located((By.CLASS_NAME, 'time-elapsed')))
        time_elapsed_txt = time_elapsed_elem.text

        print(time_elapsed_elem)
        print(time_elapsed_txt)
        print('length of string:', len(time_elapsed_txt))

    except TimeoutException:
        print('exception')
    finally:
        pass

并且url由方法

生成
def _get_market_betfair_url(self, market_id):
    try:
        event_info = self._get_event_type_from_market_id(market_id)
        event_type_name = str.lower(event_info['name'])

        # replace any spaces with hyphens
        event_type_name = event_type_name.replace(' ', '-')

        # replace soccer with football
        event_type_name = event_type_name.replace('soccer', 'football')

        # construct the url
        url = ''.join(['https://www.betfair.com/exchange/plus/', event_type_name, '/market/', str(market_id)])
        return url
    except TypeError:
        return False

_get_time_elapsed_seccer中的代码打印出来:

<selenium.webdriver.remote.webelement.WebElement (session="d58e0c50-9d45-11e7-a933-37f14018586f", element=":wdc:1505830903385")>
text:
length of string: 0

网页元素已明确返回,但我在网页上看到的文字不包括在内。一旦javascript被加载到页面上,html就像:

...
<p class="time-elapsed inplay" ng-class="{ inplay: sportsHeaderCtrl.data.event.status !== 'Finished' }">
    <!----> <!----><span ng-if="!sportsHeaderCtrl.data.moduleConfig.eventStatus[sportsHeaderCtrl.data.event.status]">25'</span>
    <!----><halftime-fulltime eventtypeid="sportsHeaderCtrl.data.event.eventTypeId" score="sportsHeaderCtrl.data.event.score" status="sportsHeaderCtrl.data.event.status"><!----></halftime-fulltime>
</p>
...

我的python代码是否无法从

标签中获取带有类名“time-elapsed”的文本“25”?

您可以通过查看https://www.betfair.com/exchange/plus/football/

上的任何游戏内足球比赛来查看我一直在使用的类似网址的示例

网址只是上面的网址,最后是特定的市场ID。

在一个理想的世界里,如果我只是通过selenium运行javascript函数,它返回经过的时间会很棒,但我不确定这是否可行!

1 个答案:

答案 0 :(得分:0)

我在此链接Python Selenium: Finds h1 element but returns empty text string

中找到了我的问题的答案

我认为那里的解释很好地解释了这个问题。