在使用Selenium WebDriver和Chrome进行网页抓取时,我遇到了一个包含固定区域的页面(它们不滚动但相对于窗口保持固定)。通常,当我请求Web浏览器使用Actions.MoveToElement()滚动到特定控件时,该元素会被其中一个固定区域遮挡。当Selenium点击一个模糊的元素时,固定区域会窃取点击而我的控件不会被点击。
固定区域有class=SomeFixedPositionStyle
。为了解决这个问题,我想让Selenium注入Javascript代码来浏览页面上的每个样式,并修改它以设置position:static
position:fixed
//*[@id="holdingsTabs"]/ul/li[3]
。我怎么能这样做?
我选择不修改固定元素的class属性,因为滚动页面的行为会将class属性重置为具有固定样式的原始值。
例如,请查看http://www.ishares.com/us/products/239572/ishares-jp-morgan-usd-emerging-markets-bond-etf。当您向上和向下滚动时,您是否看到顶部和底部的条带是固定的?
当我尝试滚动到元素Array
时(这是"所有"链接在" Holdings"部分中,它会在较低的固定区域下面结束而不能点击即可。
答案 0 :(得分:0)
您可以将样式规则注入页面
var sheet = document.styleSheets[0];
sheet.insertRule("SomeFixedPositionStyle { position: static!important; }", 1);
答案 1 :(得分:0)
在这种情况下通常有用的是滚动到元素视图:
driver.executeScript("arguments[0].scrollIntoView();", element);
您也可以通过动态更改包装器的“位置”来消除“粘性”:
var wrapper = driver.findElement(webdriver.By.css('.sticky-wrapper'));
driver.executeScript("arguments[0].style.position = null;", wrapper);