Selenium Python:检查JS变量是否为tru

2024-06-26 00:04:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用python中的selenium包来加载要保存的动态网站。但我的成功有喜有忧。我注意到成功保存的页面和没有保存的页面是有区别的。在成功的HTML源代码中,我看到了

<script language="javascript" type="text/javascript">
var PageIsReady = true;
</script>

而对于其他人,var PageIsReady是错误的。有没有办法在变量变为真后触发保存?在

这个stackoverflow question演示了如何执行超时,但它查找标记的存在,而我希望它从脚本变量的值触发。在


Tags: texttrue源代码网站varhtmltypeselenium
2条回答

您不必处理PageIsReady的值,只需等到具有确切文本内容的<script>出现在DOM中:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//script[normalize-space()="var PageIsReady = true;"]')))

这个问题的一个很好的解决方案是实现一个定制的等待条件来检查是否定义了一个变量。这种情况必须看起来像这样(小心,没有彻底测试):

class js_variable_evals_to_true(object):
    def __init__(self, variable):
        self.variable = variable
    def __call__(self, driver):
        return driver.execute_script("return {0};".format(self.variable))

用法:

^{pr2}$

查看Selenium文档中的source code,了解如何实现自定义等待条件。在

相关问题 更多 >