Javascript将位置属性更改为固定位置属性的每种样式的静态

时间:2015-10-23 00:32:51

标签: javascript html css selenium web-scraping

在使用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"部分中,它会在较低的固定区域下面结束而不能点击即可。

2 个答案:

答案 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);