通过selenium动态创建一个新元素

Bat*_*man 3 python selenium web-scraping

我需要的是在html文档的头部添加一个script标签。我正在使用下面的代码,但是当我查看页面源代码时,脚本不存在。先感谢您,

driver = webdriver.Chrome()
driver.get("http://www.x.org")


execu = '''
var scr = document.createElement('script');
scr.type = 'text/javascript';
scr.text = `let calls = (function(){
    let calls = 0;
    let fun = document.createElement;
    document.createElement = function(){
      calls++;
      return fun.apply(document, arguments);
    }
    return ()=>calls;
})();`
document.head.appendChild(scr);
'''
try:
    driver.execute_async_script(execu)
except Exception,e:
    print str(e)
Run Code Online (Sandbox Code Playgroud)

yon*_*ong 5

您绝对可以通过selenium api动态添加script标签,请尝试下面的简单代码。如果有效,您可以更改为您的内容HEADexecute_scriptscr.text

driver = webdriver.Chrome()
driver.get("http://www.x.org")
// sleep 10 seconds wait page load complete
// you should change to wait in official script
time.sleep(10)

execu = '''
var scr = document.createElement('script');
scr.type = 'text/javascript';
scr.text = 'alert("yes")';
document.head.appendChild(scr);
'''
try:
    driver.execute_script(execu) // if it work, an alert with 'yes' should display

    // sleep for a long time, so that you have more time to 
    // check the script tag appended into head tag or not.
    // only for debug purpose
    time.sleep(30)

except Exception,e:
    print str(e)
Run Code Online (Sandbox Code Playgroud)

请在DevTool的Console Tab中一一执行以下4行:

在此输入图像描述

如果你能得到一个警报,一个scriptHTML 中插入的标签head,这意味着 javascript 片段在你的浏览器上工作正常,失败应该来自其他 python 代码行

在此输入图像描述