Selenium使用twist Python滚动到视图中

2024-05-15 02:25:04 发布

您现在位置:Python中文网/ 问答频道 /正文

The blue arrow is the scroll im trying to make scroll

我正在尝试将元素滚动到视图中,以便能够处理它们。通常可以使用滚动到视图中或操作链来完成。但是滚动不在窗口中。它在窗口中。如中所示,窗口中有一个单独的滚动条。页面确实有一个普通的窗口滚动条,但滚动时不会将所需的元素放入视图中。 所以我的问题是..有没有办法向下滚动内部滚动条

蓝色箭头是我试图制作的卷轴

我知道,当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)

Tags: divnewexecutegetstyletopscriptattribute
1条回答
网友
1楼 · 发布于 2024-05-15 02:25:04

通常,selenium的正常click()操作应该为您处理滚动,即使您有内部滚动条。如果这不起作用,您需要使用JS scrollIntoView

在本例中,您尝试使用JS是正确的,但是您的选择器似乎太具体,与您想要的元素不匹配

尝试在浏览器中按F12键(将打开调试工具)

然后在控制台中键入该JS代码:

document.querySelector("#mCSB_2_dragger_vertical > .mCSB_dragger_bar")

这样,您将看到选择器实际匹配的元素。然后更改它,使其与视图中真正想要的元素相匹配

相关问题 更多 >

    热门问题