python selenium phantomJS element.location返回错误的位置

时间:2016-05-12 13:10:31

标签: python selenium selenium-webdriver phantomjs

我遇到了python selenium phantomjs的问题,我无法解决。 element.location返回错误的位置。当我看到裁剪的图像时,它会显示所需图像的一部分,也会显示不需要的图像。它完全适用于Firefox,但不适用于phantomjs。

这是代码:

def screenOfElement(self, _element):
    _location = _element.location
    _size = _element.size
    _wholePage = Image.open(StringIO.StringIO(base64.decodestring(self.webdriver.get_screenshot_as_base64())))

    _left = _location['x']
    _top = _location['y']
    _right = _location['x'] + _size['width']
    _bottom = _location['y'] + _size['height']

    return _wholePage.crop((_left, _top, _right, _bottom))

感谢。

2 个答案:

答案 0 :(得分:0)

我发现只有一种解决方案有效。

方法1:

1)隐藏除了所需元素之外的所有内容:

with open('jquery-2.2.3.min.js', 'r') as jquery_js: 
    jquery = jquery_js.read() #read the jquery from a file
    self.webdriver.execute_script(jquery) #active the jquery lib
    self.webdriver.execute_script("""
        element = $('#mydiv').parent();
        while(element.parent().length)
        {
            element.parent().siblings().hide();
            element = element.parent();
        }
    """)

2)截图。

3)显示我们隐藏的每个元素:

self.webdriver.execute_script("""
    element = $('#mydiv').parent();
    while(element.parent().length)
    {
        element.parent().siblings().show();
        element = element.parent();
    }
""")

但问题是,在我们显示所有元素之后,我们可能会显示之前隐藏的元素。有时它也不起作用。

如果您使用的是phantomJS,可能视觉部件并不重要。所以更好的解决方案是

方法2:

1)直接在<body>内移动所需元素:

$('body').append($('#mydiv'))

2)隐藏除了所需元素之外的所有元素:

$('body > :not("#mydiv")').hide();

3)再次显示:

$('body > *)').show();

希望这可以帮助遇到同样问题的人。

答案 1 :(得分:0)

您的PhantomJS窗口可能太小。

尝试:
driver = webdriver.PhantomJS() driver.set_window_size(1280, 1024)