我在C#中使用Selenium和PhantomJS驱动程序。 我需要点击网站上的特定坐标,使用Javascript(即使用selenium phantomjs驱动程序的ExecutePhantomJS(字符串脚本)功能)。我还需要捕获网络流量。我之前使用过浏览器来做到这一点,但是现在我无法使用它,因为我还需要使用另一个代理。所以我直到现在才解决这个问题:
//Hide CMD of PhantomJS.exe
var driverService = PhantomJSDriverService.CreateDefaultService();
driverService.HideCommandPromptWindow = true;
//Initialize Driver and execute Network Script to capture traffic
driver = new PhantomJSDriver(driverService);
driver.ExecutePhantomJS(networkScript);
//Call URL
driver.Navigate().GoToUrl(url);
这是networkScript:
string networkScript = "var page = this; page.onResourceRequested = function(req) { console.log('received: ' + JSON.stringify(res, undefined, 4)); }; page.onResourceReceived = function(res) { console.log('received: ' + JSON.stringify(res, undefined, 4)); };";
好事: 调用URL并将所有网络流量记录到PhantomJS.exe的控制台中。 但我不知道如何在我的C#代码中获取这些控制台日志(我需要从网络日志中获取URL等特定内容)。
我已经阅读了整个下午,但直到现在才找到解决方案。我已经尝试过的一些事情:
1)尝试使用PhantomJSOptions,你可以设置LoggingPreferences,后来我调用了driver.Manager()。Logs.GetLog(LogType),但没有控制台日志
2)不要在networkScript中使用console.log。我使用require('system')。stdout.write(...)。它也登录到控制台但我无法从我的C#代码中获取phantomjs.exe的标准输出流。
...
我真的不知道如何解决这个问题。 一种方法是登录.txt文件而不是控制台,但它是非常多的文本,后来会有很多打开的驱动程序,所以我想避免这种情况因为那时我会有非常多的.txt文件