python selenium phantomjs execute_script
python selenium phantomjs execute_script
为什么使用phantomjs会出错?
from selenium import webdriver
page_index = 1076
#driver = webdriver.Chrome() # no any errors.
driver = webdriver.PhantomJS() # will error.
driver.get('https://www.nexusmods.com/mods/')
driver.execute_script(f"window.RH_ModList.Send('page', '{page_index}');")
结果:
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: {"errorMessage":"undefined is not an object (evaluating 'window.RH_ModList.Send')","request":{"headers":{"Accept":"application/json","Accept-Encoding":"identity","Connection":"close","Content-Length":"118","Content-Type":"application/json;charset=UTF-8","Host":"127.0.0.1:57491","User-Agent":"Python http auth"},"httpVersion":"1.1","method":"POST","post":"{\"script\": \"window.RH_ModList.Send('page', '1076');\", \"args\": [], \"sessionId\": \"e7abf670-0132-11e9-ba9e-f19731f1c19f\"}","url":"/execute","urlParsed":{"anchor":"","query":"","file":"execute","directory":"/","path":"/execute","relative":"/execute","port":"","host":"","password":"","user":"","userInfo":"","authority":"","protocol":"","source":"/execute","queryKey":{},"chunks":["execute"]},"urlOriginal":"/session/e7abf670-0132-11e9-ba9e-f19731f1c19f/execute"}}
Screenshot: available via screen
Why an error occurs when using phantomjs?
因为不支持PhantomJS ES6 Promise
See the issue in Github here。如果你进行调试,你会看到该页面的这个错误
ReferenceError: Can't find variable: Promise
phantomjs://platform/bootstrap.js:87 2
ReferenceError: Can't find variable: $
因为 PhantomJS 被遗弃了,所以没有简单的修复方法。
为什么使用phantomjs会出错?
from selenium import webdriver
page_index = 1076
#driver = webdriver.Chrome() # no any errors.
driver = webdriver.PhantomJS() # will error.
driver.get('https://www.nexusmods.com/mods/')
driver.execute_script(f"window.RH_ModList.Send('page', '{page_index}');")
结果:
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: {"errorMessage":"undefined is not an object (evaluating 'window.RH_ModList.Send')","request":{"headers":{"Accept":"application/json","Accept-Encoding":"identity","Connection":"close","Content-Length":"118","Content-Type":"application/json;charset=UTF-8","Host":"127.0.0.1:57491","User-Agent":"Python http auth"},"httpVersion":"1.1","method":"POST","post":"{\"script\": \"window.RH_ModList.Send('page', '1076');\", \"args\": [], \"sessionId\": \"e7abf670-0132-11e9-ba9e-f19731f1c19f\"}","url":"/execute","urlParsed":{"anchor":"","query":"","file":"execute","directory":"/","path":"/execute","relative":"/execute","port":"","host":"","password":"","user":"","userInfo":"","authority":"","protocol":"","source":"/execute","queryKey":{},"chunks":["execute"]},"urlOriginal":"/session/e7abf670-0132-11e9-ba9e-f19731f1c19f/execute"}}
Screenshot: available via screen
Why an error occurs when using phantomjs?
因为不支持PhantomJS ES6 Promise
See the issue in Github here。如果你进行调试,你会看到该页面的这个错误
ReferenceError: Can't find variable: Promise
phantomjs://platform/bootstrap.js:87 2
ReferenceError: Can't find variable: $
因为 PhantomJS 被遗弃了,所以没有简单的修复方法。