版本55或以上的Firefox不支持Flash自动播放。
建议使用Firefox 52.9.0 延长支持版。
此版本需要使用Gecko Driver 0.18.0才能正常使用。但是不支持 set_window_size
(会报错selenium.common.exceptions.WebDriverException: Message: setWindowRect
),所以必须手动调整视口尺寸。 应该使用find_element_by_id(element_id).screenshot(output_file_name)
的方法来截长图,或者也可以用find_elements_by_tag_name('body')[0].screenshot(output_file_name)
的方法来截整页长图。
自动播放Flash的设置(参考https://blog.csdn.net/STL_CC/article/details/104968669):
1 2 3 4
| fp = webdriver.FirefoxProfile() fp.set_preference("plugin.state.flash", 2) fp.set_preference("security.insecure_field_warning.contextual.enabled", False) driver = webdriver.Firefox(firefox_profile = fp)
|
此版本还没有移除GCLI开发者工具栏,可以通过快捷键 Shift + F2
呼出。
调整视口尺寸的GCLI命令是resize to 4320 7680
。第一个参数是宽,第二个参数是高。
截图的命令是
1
| driver.get_screenshot_as_file('baidu.png')
|
既然不能控制视口,那就直接控制外层div
的样式,然后执行元素节点截图。直接用execute_script
即可。
综上,截取小花仙人物面板形象的操作有:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| from selenium import webdriver from time import sleep fp = webdriver.FirefoxProfile() fp.set_preference("plugin.state.flash", 2) fp.set_preference("security.insecure_field_warning.contextual.enabled", False) driver = webdriver.Firefox(firefox_profile = fp) driver.get("http://hua.61.com/play.shtml") driver.execute_script("document.getElementById('flashContent').innerHTML=\"<embed src='http://hua.61.com/Client.swf' width='100%' height='100%'></embed>\"")
driver.execute_script("document.getElementById('flashContent').style.width='4320px';document.getElementById('flashContent').style.height='7680px';") sleep(5) driver.execute_script("document.getElementsByTagName('embed')[0].Zoom(500)") driver.execute_script('document.getElementsByTagName("embed")[0].Zoom(20)') sleep(5)
driver.execute_script('document.getElementsByTagName("embed")[0].Pan(-4500,-2000,0)') sleep(5) driver.find_element_by_id('flashContent').screenshot('output.png') driver.execute_script("document.getElementsByTagName('embed')[0].Zoom(500)") driver.execute_script("document.getElementById('flashContent').style.height='100%';document.getElementById('flashContent').style.width='100%';")
|