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

Spi*_*or8 1 python web-scraping selenium-webdriver

我正在尝试使用 python 中的 selenium 包来加载要保存的动态网站。但我的成功有好有坏。我注意到成功保存的页面和未保存的页面之间存在差异。在成功者的 HTML 源代码中,我看到

<script language="javascript" type="text/javascript">
var PageIsReady = true;
</script>
Run Code Online (Sandbox Code Playgroud)

而对于其他情况,var PageIsReady 为 false。有没有办法可以在变量变为真后触发保存?

这个stackoverflow 问题展示了如何执行超时,但它会查找标签的存在,而我希望它触发脚本变量的值。

Geo*_*rab 5

解决此问题的一个好方法是实现自定义等待条件,该条件将检查变量是否已定义。条件必须看起来像这样(注意,没有经过彻底测试):

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))
Run Code Online (Sandbox Code Playgroud)

用法:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait

chrome = webdriver.Chrome()
chrome.get("http://google.com")
try:
    element = WebDriverWait(chrome, 10).until(js_variable_evals_to_true("toolbar.visible")
finally:
    chrome.quit()
Run Code Online (Sandbox Code Playgroud)

检查Selenium 文档中的源代码,了解如何实现自定义等待条件。