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 没有)似乎工作,我找不到任何解决方案的主要内容,如果未能解决你的问题,请参考以下文章
Python-Selenium:Chrome 无头设置不适用于“WebDriverWait”
Selenium 高阶应用之WebDriverWait 和 expected_conditions
Python Selenium.WebDriverWait 判断元素是否存在