Selenium webdriverwait(.text_to_be_present_in_element 没有)似乎工作,我找不到任何解决方案

Posted

技术标签:

【中文标题】Selenium webdriverwait(.text_to_be_present_in_element 没有)似乎工作,我找不到任何解决方案【英文标题】:Selenium webdriverwait (.text_to_be_present _in_element doesnt) seem to work and I can't find any solution to this 【发布时间】:2021-04-03 09:34:10 【问题描述】:

下面是我从网上抓取的完整的 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 错误。

【问题讨论】:

【参考方案1】:

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

WebDriverWait webDriverWait = new WebDriverWait(driver, 30);
webDriverWait.pollingEvery(Duration.ofMillis(50)); // 50 milliseconds

【讨论】:

【参考方案2】:

根据定义,text_to_be_present_in_element() 应该在 tuple 中调用,因为它不是一个函数,而是一个,初始化程序只期望 1隐式self参数:

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"))

参考文献

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

How to extract data from the following html? init() takes 2 positional arguments but 3 were given using WebDriverWait and expected_conditions as element_to_be_clickable with Selenium Python

【讨论】:

以上是关于Selenium webdriverwait(.text_to_be_present_in_element 没有)似乎工作,我找不到任何解决方案的主要内容,如果未能解决你的问题,请参考以下文章

Selenium之WebDriverWait

Python-Selenium:Chrome 无头设置不适用于“WebDriverWait”

Selenium 高阶应用之WebDriverWait 和 expected_conditions

Python Selenium.WebDriverWait 判断元素是否存在

selenium WebDriverWait 与 expected_conditions

Python Selenium.WebDriverWait 最强详解页面加载策略