Python 使用Selenium获取页面,但等待未知元素值不为空 上下文

Python 使用Selenium获取页面,但等待未知元素值不为空 上下文,python,selenium,selenium-webdriver,Python,Selenium,Selenium Webdriver,这是的一份复本,据我所知,该复本已关闭,没有任何有效性 闭包推理中的关联答案都依赖于知道预期的文本值。在每个答案中,它明确地显示了硬编码到WebDriverWait调用中的预期文本。此外,两个链接的答案都没有触及我问题的最后部分: [预期条件]出现在页面获取之前还是之后 “重复”问题 原始问题 我正在使用Selenium抓取一个网页,但我需要等待加载某个值。我不知道这个值是什么,只知道它将出现在什么元素中 似乎使用预期条件text\u to\u present\u in_element

这是的一份复本,据我所知,该复本已关闭,没有任何有效性

闭包推理中的关联答案都依赖于知道预期的文本值。在每个答案中,它明确地显示了硬编码到
WebDriverWait
调用中的预期文本。此外,两个链接的答案都没有触及我问题的最后部分:

[预期条件]出现在页面获取之前还是之后

“重复”问题

原始问题 我正在使用Selenium抓取一个网页,但我需要等待加载某个值。我不知道这个值是什么,只知道它将出现在什么元素中

似乎使用预期条件
text\u to\u present\u in_element\u value
text\u to\u present\u in_element
是最有可能的方法,但我很难找到任何关于如何使用这些的实际文档,我不知道它们是在页面获取之前还是之后出现:

webdriver.get(url)

重新措辞
如何使用Selenium获取页面,但在继续之前等待未知文本值填充元素的文本或值?

我确信我的答案不是最好的,但这里是我自己代码的一部分,它帮助我解决了与您的问题类似的问题

在我的例子中,DOM的加载时间有问题。有时需要5秒,有时需要1秒,以此类推

url = 'www.somesite.com'
browser.get(url)
因为在我的例子中,
browser.implicitly\u wait(7)
不够。我做了一个简单的
for循环
,检查内容是否已加载

some code...

 for try_html in range(7):
        """ Make 7 tries to check if the element is loaded """
        browser.implicitly_wait(7)
        html = browser.page_source
        soup = BeautifulSoup(html, 'lxml')
        raw_data = soup.find_all('script', type='application/ld+json')
        

       """if SKU in not found in the html page we skip 
         for another loop, else we break the 
          tryes and scrape the page"""

        if 'sku' not in html:
            continue
        else:
            scrape(raw_data)
            break

它并不完美,但你可以试试。

你能在元素出现之前和之后添加HTML吗?你看了吗?@MaximilianPeters我需要的特定元素似乎总是出现在已删除的文档中,只是其中没有文本值。当我在浏览器中加载页面时,在填充之前,该值为空一秒或两秒。我很想发布原始HTML,但我现在正在处理一个身份验证问题,阻止我登录该网站。一旦客户端修复其身份验证,我将使用原始HTML进行更新。你的相关问题看起来很有希望。一旦我被解锁,我会尝试一下。看起来你只是需要一个轮询循环。。。检查元素是否为空。如果不是,则继续。您不需要webdriverwait或预期的条件。@pcalkins我想我的印象是,一旦使用
driver.get(url)
抓取页面,它就作为静态对象存在,但是如果它将继续加载其元素,那么我的问题应该得到有效解决。一旦我重新获得访问权限,我很想尝试一下……听起来像是一个“延迟加载”网站,在页面完全加载后触发一个脚本来填充DOM。谢谢@BBorisov95。我会坚持这一点作为最后的手段。我希望避免硬编码等待每个页面,因为这将使我的抓取速度降低一个固定的量,而如果我可以告诉它等待某个值加载,那么理论上它应该动态地等待每个页面所需的时间。