我正在使用 Selenium v4 抓取网络流量数据,并使用 Apache POI 将其导出到 excel 文件中。我可以使用该println
语句在控制台中打印抓取的数据,但是,我无法导出脚本抓取的所有数据。请帮我解决一下这个。这是我的代码:
注意:我使用过Thread.sleep()
,隐式等待,但这没有帮助。
public class CaptureNetworkTraffic
{
//CreateFile File;
public static void main(String[] args) throws IOException, InterruptedException
{
//File=new CreateFile();
XSSFWorkbook workbook= new XSSFWorkbook();
XSSFSheet sheet= workbook.createSheet("Network Traffic");
System.setProperty("webdriver.chrome.driver", "C:\\Users\\prash\\Downloads\\chromedriver_win32\\chromedriver.exe");
ChromeDriver d1=new ChromeDriver();
//d1.manage().timeouts().implicitlyWait(Duration.ofMinutes(1));
DevTools devtool=d1.getDevTools();
devtool.createSession();
devtool.send(Network.enable(Optional.empty(), Optional.empty(), Optional.empty()));
System.out.println("***************response Received**************");
//devtool.addListener(null, null);
devtool.addListener(Network.responseReceived(), response ->
{
Response res=response.getResponse();
Object scrappedDataArray[][]= {{res.getUrl(),res.getResponseTime(),res.getHeaders()}};
int rows=scrappedDataArray.length;
int cols=scrappedDataArray[0].length;
for(int r=0;r<rows;r++)
{
XSSFRow createRow=sheet.createRow(r);
for(int c=0;c<cols;c++)
{
XSSFCell createCell=createRow.createCell(c);
Object value=scrappedDataArray[r][c];
if(value instanceof String)
createCell.setCellValue((String)value);
if(value instanceof Integer)
createCell.setCellValue((Integer)value);
if(value instanceof Long)
createCell.setCellValue((Long)value);
}
}
});
//DevTools devTools = d1.getDevTools();
d1.get("https://www.google.com/");
Thread.sleep(4000);
String filepath=".\\scrapedDataFiles\\data.xlsx";
FileOutputStream fos= new FileOutputStream(filepath);
//Thread.sleep(4000);
workbook.write(fos);
workbook.close();
}
}