硒:等待empy元素(跨度)包含任何文本

时间:2018-10-22 22:29:18

标签: python selenium selenium-webdriver web-scraping selenium-chromedriver

因此,我遇到一个问题,即缓慢加载的数据使我无法使用Selenium。

页面本身完成加载,但是随后我在指定的时间间隔内以随机间隔显示数据(脚本正在运行,这可能需要X倍的时间)。它可能显示为空或带有字符串“ n / a”。

注意:chart-data-window-item-value类不是唯一的,我必须使用XPATH来找到正确的div / span。

我正在等待一个跨度填满一个随机的小数,然后继续。

空跨度:

<div class="chart-data-window-item-value"><span style="color:"></span></div>

<div class="chart-data-window-item-value"><span style="color:">n/a</span></div>

数据一旦加载:

<div class="chart-data-window-item-value"><span style="color:rgba(255, 127, 0, 1)">73.26000000</span></div>

我尝试了各种方法,最后是:

# wait = WebDriverWait(browser, 10).until(EC.text_to_be_present_in_element_value((By.XPATH, '/html/body/div[1]/div[3]/div/div[1]/div[1]/div[3]/div/div[2]/div[1]/div[3]/div[2]/div[10]/div[2]/span'), r"(?<=\()[0-9]*)"))

没有运气。

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

尝试使用自定义预期条件检查跨度是否包含有效文本,而不是正则表达式。

class element_has_some_valid_text(object):
  def __init__(self, locator):
    self.locator = locator
    self.css_class = css_class

  def __call__(self, driver):
    element = driver.find_element(*self.locator)   
    if element.text and element.text != "n/a":
        return element
    else:
        return False

wait = WebDriverWait(driver, 60)
element = wait.until(element_has_some_valid_text((By.XPATH, 'your xpath goes here'))

您的xpath也很长,请检查它是否唯一。添加更多要询问的html详细信息,以帮助您简化和清除xpath。

答案 1 :(得分:-1)

我认为您正在使这一过程变得比它需要的复杂。如果您在text_to_be_present_in_element中查看the docs,则会在右侧看到[源]链接。单击该按钮,然后查看源以查看其工作原理。检查的条件是self.text in element_text,它是一个包含。有了这些信息,您应该只需要在元素文本中查找一个.,即可表明您的电话号码已经出现。

WebDriverWait(browser, 10).until(EC.text_to_be_present_in_element_value((By.XPATH, '/html/body/div[1]/div[3]/div/div[1]/div[1]/div[3]/div/div[2]/div[1]/div[3]/div[2]/div[10]/div[2]/span'), '.'))

您的代码使用的是正则表达式(我认为)...该方法不接受正则表达式,并且可能只是将其作为实际字符串处理。

相关问题