我正在使用browsermob和selenium来创建在网站上运行的脚本。我试图抓住页面上具有特定名称的所有元素。我的问题是,当我尝试使用window.document.getElementsByName("name");
浏览器时,表示window
未定义。你如何定义窗口?
答案 0 :(得分:3)
您需要调用selenium.getEval()。该调用的签名是它需要一个字符串参数,它是将在浏览器中执行的JavaScript,它返回一个字符串,即字符串表示返回的结果。
最后一部分 - 字符串表示 - 很重要。虽然你无法在BrowserMob脚本中执行此操作:
var elements = window.document.getElementsByName("name");
你也不能这样做:
var elements = selenium.getEval('return window.document.getElementsByName("name")');
虽然第二个示例更接近您需要做的事情,但它并不会起作用,因为getElementsByName返回一个转换为字符串的DOM对象数组。相反,您很可能需要决定您要对这些元素执行什么,并创建一个更大的JS片段到eval,它会返回您想要的内容。
例如,这将返回页面中第二个链接的href属性:
var secondHref = selenium.getEval('return window.document.getElementsByName("a")[1].href');
我希望有所帮助。您需要了解的主要事情是,虽然BrowserMob脚本可以用JavaScript编写,但它运行的JavaScript环境在浏览器中不是。要在浏览器中评估任意JavaScript,您必须通过getEval(),从而创建一些JavaScript-in-JavaScript情况,这可能会让人感到有些困惑。