关于学院网站建设的通知,深圳sem竞价托管,广西桂林阳朔旅游攻略必去景点,网站调研方法有哪些内容今天遇到一个很有意思的问题#xff0c;我的爬取的目标页面上有时会出现一个弹窗#xff0c;它挡住我点击其它按钮了#xff0c;我想找到它的关闭按钮#xff0c;自动点击一下关闭掉#xff0c;本来是很简单的事情#xff0c;但偏偏出问题了#xff0c;DOM中看到的html是…今天遇到一个很有意思的问题我的爬取的目标页面上有时会出现一个弹窗它挡住我点击其它按钮了我想找到它的关闭按钮自动点击一下关闭掉本来是很简单的事情但偏偏出问题了DOM中看到的html是这样的
button idember213 classmsg-overlay-bubble-header__control artdeco-button artdeco-button--circle artdeco-button--1 artdeco-button--primary ember-viewsvg rolenone aria-hiddentrue classartdeco-button__icon xmlnshttp://www.w3.org/2000/svg width16 height16 viewBox0 0 16 16 data-supported-dps16x16 data-test-iconclose-small!----use href#close-small width16 height16/use/svgspan classartdeco-button__text Close your conversation with {0} and Elise Tolliver/span
/button看起来很简单对吧我习惯先在控制台试一下于是写了
$x(//use[href#close-small])发现匹配结果竟然是空的。
我的第一反应是会不会是自定义的元素不能直接匹配查了资料说是没问题的然后查了很多资料发现可能跟命名空间有关系像上面这个就是因为svg元素定义了xmlns属性所以浏览器认为它不是全局变量所以无法用全局表达式//来匹配但这种元素要怎样匹配呢 有两种情况 1、在匹配时加上准确的命名空间还是上面的dom为例可以这样匹配这种情形适合有多个不同命名空间的情形
$x(//*[local-name()svg and namespace-uri()http://www.w3.org/2000/svg])2、还有一种简化的写法就是直接用local-name()方法匹配适合不需要区分命名空间的情形
$x(//*[local-name()svg])所以最终我的表达式是
$x(//*[local-name()use and href#close-small])这样就能准确地找到这个关闭按钮了。 如果本文对你有帮助请点赞支持一下谢谢