我正在尝试从
Selenium驱动的ChromeDriver启动google-chrome浏览上下文中检索
navigator.plugins
的值。
使用 google-chrome-devtools 我可以检索
navigator.userAgent
和 navigator.plugins
,如下所示:
但是使用Selenium的
execute_script()
方法我可以提取navigator.userAgent
但是navigator.plugins
会引发以下循环引用错误:
代码块:
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument("start-maximized")
driver = webdriver.Chrome(options=options, executable_path=r'C:\WebDrivers\chromedriver.exe')
driver.get("https://www.google.com/")
print("userAgent: "+driver.execute_script("return navigator.userAgent;"))
print("plugins: "+driver.execute_script("return navigator.plugins;"))
控制台输出:
userAgent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36
Traceback (most recent call last):
File "C:\Users\Soma Bhattacharjee\Desktop\Debanjan\PyPrograms\navigator_properties.py", line 19, in <module>
print("vendor: "+driver.execute_script("return navigator.plugins;"))
File "C:\Python\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 636, in execute_script
'args': converted_args})['value']
File "C:\Python\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "C:\Python\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.JavascriptException: Message: javascript error: circular reference
(Session info: chrome=83.0.4103.116)
我已经经历了以下关于“循环引用”的讨论,我理解了这个概念。但我不知道应该如何解决这里的问题。
navigator.plugins
吗?
返回一个PluginArray 有关。
PluginArray
页面列出了可用的方法和属性,我用它们编写了返回名称列表的代码。您可以根据需要进行调整。
print("plugins: " + driver.execute_script("var list = [];for(var i = 0; i < navigator.plugins.length; i++) { list.push(navigator.plugins[i].name); }; return list.join();"))
PluginArray 对象,列出描述应用程序中安装的插件的 Plugin 对象。 plugins
是 PluginArray
对象,用于通过名称或项目列表访问
Plugin
对象。返回的值具有 length 属性,并支持使用括号表示法(例如
plugins[2]
)以及通过
item(index)
和
namedItem("name")
方法访问单个项目。要提取
navigator.plugins
要获取
plugins
names 列表:
print(driver.execute_script("return Array.from(navigator.plugins).map(({name}) => name);"))
控制台输出:['Chrome PDF Plugin', 'Chrome PDF Viewer', 'Native Client']
plugins
文件名列表:
print(driver.execute_script("return Array.from(navigator.plugins).map(({filename}) => filename);"))
控制台输出:['internal-pdf-viewer', 'mhjfbmdgcfjbbpaeojofohoefgiehjai', 'internal-nacl-plugin']
plugins
描述列表:
print(driver.execute_script("return Array.from(navigator.plugins).map(({description}) => description);"))
控制台输出:['Portable Document Format', '', '']