我正在尝试使用python中的selenium包来加载要保存的动态网站。但我的成功喜忧参半。我注意到成功保存的页面与不成功保存的页面之间存在差异。在成功的HTML源代码中,我看到了
<script language="javascript" type="text/javascript">
var PageIsReady = true;
</script>
而对于其他人,var PageIsReady为false。有没有办法在变量变为真后触发保存?
这个stackoverflow question显示了如何进行超时,但是当我希望它触发脚本变量的值时,它会查找标记的存在。
答案 0 :(得分:3)
解决此问题的一个很好的解决方案可能是实现自定义等待条件,它将检查变量是否定义。条件必须看起来像这样(小心,未经过彻底测试):
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))
用法:
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()
检查Selenium文档中的source code,了解如何实现自定义等待条件。
答案 1 :(得分:0)
您不必处理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;"]')))