我正在尝试将元素滚动到视图中,以便能够处理它们。通常可以使用滚动到视图中或操作链来完成。但是滚动不在窗口中。它在窗口中。如中所示,窗口中有一个单独的滚动条。页面确实有一个普通的窗口滚动条,但滚动时不会将所需的元素放入视图中。 所以我的问题是..有没有办法向下滚动内部滚动条
蓝色箭头是我试图制作的卷轴
我知道,当iv手动滚动以将元素带入视图时,用这个滚动可以阻止我的代码崩溃,它可以工作,但我需要它自动完成。 需要注意的是,为了显示更多的元素,屏幕被稍微缩小了。我认为这是可行的,但是如果我在活动的交易栏中有更多的元素,那么这种技术就过时了
我想要移动的滚动条的CSS选择器在这里
driver1.executeScript("arguments[0].scrollIntoView(true);", driver1.find_element_by_css_selector("#mCSB_2_dragger_vertical > .mCSB_dragger_bar"));
编辑: 收集了一些出错的代码
scrollbar = str(driver1.find_element_by_xpath("//div[@id='mCSB_2_dragger_vertical']").get_attribute("style"))
print(scrollbar)
new_style = scrollbar.get_attribute('style').replace('top: 0px', 'top 200px')
driver1.execute_script('arguments[6].setAttribute("style", "%s")' % new_style, scrollbar)
print(scrollbar)
抛出此错误
new_style = scrollbar.get_attribute('style').replace('top: 0px', 'top 200px')
AttributeError: 'str' object has no attribute 'get_attribute'
找到了这个有帮助的链接
How can I change an attribute value in the DOM using Selenium and Python
编辑2:
尝试了多种方法来尝试并实现它。我认为我这里有一种方法是可行的,只是需要调整一下
#scrollbar = str(driver1.find_element_by_xpath("//div[@id='mCSB_2_dragger_vertical']").get_attribute("style"))
#print(scrollbar)
#new_style = driver1.find_element_by_xpath("//div[@id='mCSB_2_dragger_vertical']").get_attribute("style").replace('top: 0px', 'top: 200px')
#driver1.execute_script('arguments[6].setAttribute("style", "%s")' % new_style, scrollbar)
#print(scrollbar)
element = driver1.find_element_by_xpath("//div[@id='mCSB_2_dragger_vertical']")
#A = driver1.execute_script("argument[0]",element)
driver1.execute_script("arguments[0].setAttribute('style', 'top: 300px')", element)
#A =driver1.execute_script("arguments[0].value = 'top: 100px'", element)
#print(A)
#driver1.execute_script("arguments[0].setAttribute('top:', 'top: 300px')", element)
#div_elem = driver1.find_element_by_xpath("//div[@id='mCSB_2_dragger_vertical']")
#print(div_elem.text)
#new_style = div_elem.get_attribute('style').replace('top: 0px', 'top: 200px')
#driver1.execute_script('arguments[0].setAttribute("style", "%s")' % new_style, div_elem)
#print(div_elem.text)
#newvalue = "200px"
#splitting = scrollbar.split(": ")
#indextochange = str(splitting[6])
#EntirenewAttribute = str(scrollbar.replace(indextochange,newvalue))
#driver1.execute(scrollbar.replace(scrollbar,EntirenewAttribute))#EntirenewAttribute
#driver1.execute_script("arguments[0].value = arguments[1]", scrollbar, top = "200")
# print(scrollbar)
通常,selenium的正常click()操作应该为您处理滚动,即使您有内部滚动条。如果这不起作用,您需要使用
JS scrollIntoView
在本例中,您尝试使用JS是正确的,但是您的选择器似乎太具体,与您想要的元素不匹配
尝试在浏览器中按F12键(将打开调试工具)
然后在控制台中键入该JS代码:
这样,您将看到选择器实际匹配的元素。然后更改它,使其与视图中真正想要的元素相匹配
相关问题 更多 >
编程相关推荐