0

下面是我从网上抓取的完整的 html 元素

<div data-v-a27cb890="" class="text-2xl font-bold font-numeric">19.60</div>

如您所见,我正在选择一个 20 秒倒计时 html 计时器代码,这里的问题是我在下面编写的代码似乎不起作用。当计时器达到 15.28 秒时。我想打印出来。

timer = WebDriverWait(driver, 30).until(EC.text_to_be_present_in_element(By.XPATH, '//*[@id="page-scroll"]/div[1]/div/div/div[3]/div[3]/div/div[2]'), "15.28")
print(float(timer.text))

WebDriverWaiting 30 秒后,即使计时器在我的屏幕上滚动过去,它也找不到我想要打印的文本。然后它给出一个 TimeoutException 错误。

4

2 回答 2

1

根据selenium.webdriver.support.wait文档,默认轮询间隔为 0.5s。所以它可能不符合你的期望,可以捕捉到 15.28s。尝试自定义您自己的时间间隔:

WebDriverWait webDriverWait = new WebDriverWait(driver, 30);
webDriverWait.pollingEvery(Duration.ofMillis(50)); // 50 milliseconds
于 2020-12-25T09:06:38.983 回答
0

根据定义,text_to_be_present_in_element()应该在 a 内调用,tuple因为它不是函数而是,其中初始化程序只需要隐式self之外的1 个参数:

class text_to_be_present_in_element(object):
    """ An expectation for checking if the given text is present in the
    specified element.
    locator, text
    """
    def __init__(self, locator, text_):
    self.locator = locator
    self.text = text_

    def __call__(self, driver):
    try:
        element_text = _find_element(driver, self.locator).text
        return self.text in element_text
    except StaleElementReferenceException:
        return False

所以而不是:

timer = WebDriverWait(driver, 30).until(EC.text_to_be_present_in_element(By.XPATH, '//*[@id="page-scroll"]/div[1]/div/div/div[3]/div[3]/div/div[2]'), "15.28")

您需要(添加额外的括号):

timer = WebDriverWait(driver, 30).until(EC.text_to_be_present_in_element((By.XPATH, '//*[@id="page-scroll"]/div[1]/div/div/div[3]/div[3]/div/div[2]'), "15.28"))

参考

您可以在以下位置找到一些相关的详细讨论:

于 2020-12-25T09:39:01.987 回答