我有一个关于抓取脚本的问题我试图在具有ssh访问权限的远程服务器上运行。我使用带有Xvfb的Firefox无头浏览器来运行我的测试,但最近我遇到了一个我无法解决的问题。我有两个类似的脚本尝试获取角度范围以获取加载到页面中的数据,但是使用其中一个脚本我收到了firefox错误。
这两个页面都有异步加载,所以我等待加载相关对象但是在一个站点上,在加载对象之前,firefox崩溃了。
我的Windows 7 PC本地使用相同的firefox版本(46.0)一切正常。我可以在firefox崩溃后创建远程服务器上的情况屏幕截图,截图如下所示。
我用来检索角度对象的代码是:
driver.execute_script("return JSON.stringify(angular.element('.ev-container-overzicht').scope().producten)")
我还试图应用Firefox配置文件来初始化一些设置而没有任何运气。创建配置文件的代码:
firefoxProfile = webdriver.FirefoxProfile()
firefoxProfile.set_preference('webdriver_assume_untrusted_issuer', False)
firefoxProfile.set_preference('permissions.default.stylesheet', 2)
firefoxProfile.set_preference('permissions.default.image', 2)
firefoxProfile.set_preference('dom.ipc.plugins.enabled.libflashplayer.so','false')
firefoxProfile.set_preference("http.response.timeout", 10)
firefoxProfile.set_preference("dom.max_script_run_time", 10)
firefoxProfile.set_preference("javascript.enabled", True)
firefoxProfile.set_preference("typeerror.enabled", True)
driver = webdriver.Firefox(firefox_profile=firefoxProfile)
(我添加了typeerror.enabled = True作为猜测,因为这就是错误的内容,无论是真还是假都没有区别。)
我还没有尝试过不同的浏览器(phantomjs或chrome),这将是我的下一步。但我希望它能在Firefox中运行。
服务器运行Ubuntu 14.04.4 LTS。
编辑:
让我尝试更好地解释问题。我有一个网站,easyswitch.nl,允许用户填写表格并比较结果。我试图通过运行selenium来自动化这个过程。
在本地,情况如下:
我无法添加超过2个链接,所以用文字解释:
- 主页面上的表格(easyswitch.nl)填写了
- 一个微调器启动并进行ajax调用以检索角度对象
The objects are loaded and can be scraped
通过运行javascript命令并使用以下行将其解析为json来抓取角度对象:
data = driver.execute_script("return JSON.stringify(angular.element('.ev- container-overzicht').scope().producten)")
products = json.loads(data.encode('utf-8'))
在此之后,我可以通过products对象访问所有数据。同样,在本地,这在Firefox浏览器和Phantomjs浏览器中都可以正常工作。 Phantomjs浏览器日志:
[INFO - 2016-05-26T08:28:28.560Z] GhostDriver - Main - running on port 55615
[INFO - 2016-05-26T08:28:28.910Z] Session [d2cb0b30-231b-11e6-9fcb-6d88687426db] - page.settings - {"XSSAuditingEnabled":false,"javascriptCanCloseWindows":true,"javascriptCanOpenWindows":true,"javascriptEnabled":true,"loadImages":true,"localToRemoteUrlAccessEnabled":false,"userAgent":"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/538.1 (KHTML, like Gecko) PhantomJS/2.1.1 Safari/538.1","webSecurityEnabled":true}
[INFO - 2016-05-26T08:28:28.910Z] Session [d2cb0b30-231b-11e6-9fcb-6d88687426db] - page.customHeaders: - {}
[INFO - 2016-05-26T08:28:28.910Z] Session [d2cb0b30-231b-11e6-9fcb-6d88687426db] - Session.negotiatedCapabilities - {"browserName":"phantomjs","version":"2.1.1","driverName":"ghostdriver","driverVersion":"1.2.0","platform":"windows-8.1-32bit","javascriptEnabled":true,"takesScreenshot":true,"handlesAlerts":false,"databaseEnabled":false,"locationContextEnabled":false,"applicationCacheEnabled":false,"browserConnectionEnabled":false,"cssSelectorsEnabled":true,"webStorageEnabled":false,"rotatable":false,"acceptSslCerts":false,"nativeEvents":true,"proxy":{"proxyType":"direct"},"phantomjs.page.settings.webStorageEnabled":true}
[INFO - 2016-05-26T08:28:28.910Z] SessionManagerReqHand - _postNewSessionCommand - New Session Created: d2cb0b30-231b-11e6-9fcb-6d88687426db
[INFO - 2016-05-26T08:32:53.714Z] SessionManagerReqHand - _cleanupWindowlessSessions - Asynchronous Sessions clean-up phase starting NOW
在服务器上,情况如下:
火狐
当在本地运行,填写表格并按下比较按钮时,同样的情况发生,微调器开始加载但角度对象永远不会被加载,并且一段时间后firefox崩溃并出现如上所示的错误(第一张图像)。
Firefox日志:
我不确定在无头运行时我能在哪里找到Firefox的日志,这里可能会有一些提示吗?
Phantomjs
与Firefox相同,只有phantomjs不会崩溃但只是无限加载,直到达到手动截止点。
Phantomjs日志:
PhantomJS is launching GhostDriver...
[INFO - 2016-05-26T09:04:15.651Z] GhostDriver - Main - running on port 43616
[INFO - 2016-05-26T09:04:16.527Z] Session [d2dfb260-2320-11e6-a24b-9798e4d4ca10] - page.settings - {"XSSAuditingEnabled":false,"javascriptCanCloseWindows":true,"javascriptCanOpenWindows":true,"javascriptEnabled":true,"loadImages":true,"localToRemoteUrlAccessEnabled":false,"userAgent":"Mozilla/5.0 (Unknown; Linux x86_64) AppleWebKit/534.34 (KHTML, like Gecko) PhantomJS/1.9.8 Safari/534.34","webSecurityEnabled":true}
[INFO - 2016-05-26T09:04:16.527Z] Session [d2dfb260-2320-11e6-a24b-9798e4d4ca10] - page.customHeaders: - {}
[INFO - 2016-05-26T09:04:16.541Z] Session [d2dfb260-2320-11e6-a24b-9798e4d4ca10] - Session.negotiatedCapabilities - {"browserName":"phantomjs","version":"1.9.8","driverName":"ghostdriver","driverVersion":"1.1.0","platform":"linux-unknown-64bit","javascriptEnabled":true,"takesScreenshot":true,"handlesAlerts":false,"databaseEnabled":false,"locationContextEnabled":false,"applicationCacheEnabled":false,"browserConnectionEnabled":false,"cssSelectorsEnabled":true,"webStorageEnabled":false,"rotatable":false,"acceptSslCerts":false,"nativeEvents":true,"proxy":{"proxyType":"direct"}}
[INFO - 2016-05-26T09:04:16.541Z] SessionManagerReqHand - _postNewSessionCommand - New Session Created: d2dfb260-2320-11e6-a24b-9798e4d4ca10
我还尝试通过在驱动程序初始化中添加以下代码行来使用Phantomjs中的设置:
cap = webdriver.DesiredCapabilities.PHANTOMJS.copy() cap['phantomjs.page.settings.webStorageEnabled'] = True
cap['phantomjs.page.settings.applicationCacheEnabled'] = True
driver = webdriver.PhantomJS(desired_capabilities=cap)
没有运气。我希望这些信息能提供更多见解!