在浏览器的开发工具中,我设置了一个XHR断点,当页面执行XHR时,它会在断点处暂停。然后我可以在控制台中打印一些变量。但是当我用 selenium 访问同一个变量时,它会抛出变量未定义的错误。
是否可以在 selenium 中访问开发工具控制台的相同上下文。
从控制台:
t
Object { type: "POST", data: '{"comm":{"cv":4747474,"ct
来自硒:
dirver.execute_script('''console.log(t)''')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "D:\Programs\python\Lib\site-packages\selenium\webdriver\remote\webdriver.py", line 884, in execute_script
return self.execute(command, {
^^^^^^^^^^^^^^^^^^^^^^^
File "D:\Programs\python\Lib\site-packages\selenium\webdriver\remote\webdriver.py", line 430, in execute
self.error_handler.check_response(response)
File "D:\Programs\python\Lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 247, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.JavascriptException: Message: ReferenceError: t is not defined
我还有一个问题,现在我需要手动打开devtools并在selenium打开页面后手动设置断点。有可能用硒来做吗?我搜索了很多,但没有结果。
如果我理解正确,您可以将变量存储在全局中,这样您就可以从 Selenium 执行上下文中获取它。
所以你的代码会做这样的事情:
--auto-open-devtools-for-tabs
参数await
。debugger
示例:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument("--auto-open-devtools-for-tabs");
driver = webdriver.Chrome(chrome_options)
wait_for_var_script = """
let waitFor = async (action, pollIntervalMs = 1000) => {
let result;
while (!result) {
console.log('Waiting for result');
result = await action();
await new Promise(resolve => setTimeout(resolve, pollIntervalMs));
}
return result;
};
const getSomeObject = () => {
let _result = window.t;
_result && console.log(_result);
return _result;
};
setTimeout(() => window.t = { a: '1' }, 10000);
await waitFor(getSomeObject);
debugger;
"""
driver.get('https://example.com/')
driver.execute_script(wait_for_var_script)