我遇到了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))
感谢。
答案 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)