导航到任何页面,我可以查看Watir附带的脚本:
b = Watir::Browser.new
b.goto "https://macys.com"
b.scripts.collect(&:src)
# => [ ..., "https://mathid.mathtag.com/d/i.js", ...]
结果是大量的脚本,我随机选择了一个脚本来查找:
b.script(src: "https://mathid.mathtag.com/d/i.js").html
# => Watir::Exception::UnknownObjectException: timed out after 30 seconds, waiting for #<Watir::HTMLElement: located: false; {:xpath=>"//script[@src='https://mathid.mathtag.com/d/i.js']"}> to be located; Maybe look in an iframe?
# ...
但是它从来没有以这种方式找到任何脚本。为什么?如何在不调查scripts.collect(&:src)
的情况下检测到存在?
答案 0 :(得分:2)
Watir正在基于与DOM中存在的字符串匹配的元素来定位元素。如果研究DOM,您会发现https:
不存在//mathid.mathtag.com/d/i.js
。浏览器驱动程序在查询属性值时将其转换为包含https
,但是Watir无法在定位时假定这一点。
这将起作用:
browser.script(src: '//mathid.mathtag.com/d/i.js')
答案 1 :(得分:1)
这是因为您尝试的链接没有https:
,您要查找的元素是这个
<script type="text/javascript" async="" src="//mathid.mathtag.com/d/i.js"/>
因此编写此代码,它将起作用。
p b.script(src: "//mathid.mathtag.com/d/i.js").html