小编Ish*_*ank的帖子

如果在网页中进行Ajax请求或使用Selenium Web驱动程序拦截XMLHttpRequest,则使用Java Script进行跟踪

我正在使用Selenium WebDriver来抓取一个网站(例如,我也将抓取其他网站!),它具有无限滚动.

问题陈述:

向下滚动无限滚动页面,直到内容停止使用Selenium Web驱动程序加载.

我的方法: 目前我这样做 -

第1步:滚动到页面底部

JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("javascript:window.onload=toBottom();"+
                        "function toBottom(){" +
                        "window.scrollTo(0,Math.max(document.documentElement.scrollHeight," +
                        "document.body.scrollHeight,document.documentElement.clientHeight));" +
                "}");
Run Code Online (Sandbox Code Playgroud)

然后我等待一段时间让Ajax请求像这样完成 -

第2步:明确等待Ajax请求结束

了Thread.sleep(1000);

然后我给另一个java脚本来检查页面是否可滚动

第3步:检查页面是否可滚动

//Alternative to document.height is to be used which is document.body.clientHeight
//refer to https://developer.mozilla.org/en-US/docs/DOM/document.height

    if((Long)js.executeScript("return " +
                                "(document.body.clientHeight-(window.pageYOffset + window.innerHeight))")>0)
Run Code Online (Sandbox Code Playgroud)

如果上述条件为真,那么我重复步骤1 - 3,直到步骤3中的条件为假.

问题: 我不想Thread.sleep(1000);在步骤2中给出,而是我想在后台Ajax请求结束时使用Java Script检查,如果步骤3中的条件为真,则进一步向下滚动.

PS:我不是页面的开发者所以我无法访问运行页面的代码,我可以在网页中注入java脚本(如步骤1和3中所示).并且,我必须在无限滚动期间为任何具有Ajax请求的网站编写通用逻辑.

我将感激有些人可以在这里休息一下!

编辑:好的,经过2天的努力,我发现我通过Selenium WebDriver抓取的页面可以包含任何这些JavaScript库,我将不得不根据不同的库进行池化,例如,使用jQuery api 的web应用程序,我可能正在等待

(Long)((JavascriptExecutor)driver).executeScript("return jQuery.active")
Run Code Online (Sandbox Code Playgroud)

返回零.

同样,如果Web应用程序使用Prototype JavaScript库,我将不得不等待

(Long)((JavascriptExecutor)driver).executeScript("return Ajax.activeRequestCount")
Run Code Online (Sandbox Code Playgroud)

返回零. …

javascript ajax xmlhttprequest selenium-webdriver

19
推荐指数
2
解决办法
7421
查看次数

在javascript中更改日期格式

我在做一个项目ASP.NET,c#.

我有一个.aspx视图,我把一个数据选择器批准日期.

我在OnChange事件上获取datepicker的值.

我的日期选择器在.aspx视图中看起来像:

 <%: Html.Telerik().DatePickerFor(model => model.ApprovalDate).ClientEvents(events => events.OnChange("OnChangeDatePicker"))%>
Run Code Online (Sandbox Code Playgroud)

我有一个javascript函数,它调用datepicker的OnChange事件.

function OnChangeDatePicker(e) {
   ApprovalDate = e.date;
}
Run Code Online (Sandbox Code Playgroud)

在ApprovalDate中,我获得了datepicker的值:Wed Aug 2 00:00:00 UTC+0530 2013

但我希望mm/dd/yyyy格式化日期.

任何建议,将不胜感激...

javascript datepicker telerik asp.net-mvc-3

2
推荐指数
1
解决办法
401
查看次数

使D3.js 2D图表图表响应

首先,我想说清楚我确实通过stackoverflow中发布的以下链接:

在d3.js中调整窗口大小时调整svg的大小

以下是jsfiddle和代码的链接:https://jsfiddle.net/adityap16/d61gtadm/8/

码-

var data = [
{"mytime": "2015-12-01T11:10:00.000Z", "value": 64},
{"mytime": "2015-12-01T11:15:00.000Z", "value": 67},
{"mytime": "2015-12-01T11:20:00.000Z", "value": 70},
{"mytime": "2015-12-01T11:25:00.000Z", "value": 64},
{"mytime": "2015-12-01T11:30:00.000Z", "value": 72},
{"mytime": "2015-12-01T11:35:00.000Z", "value": 75},
{"mytime": "2015-12-01T11:40:00.000Z", "value": 71},
{"mytime": "2015-12-01T11:45:00.000Z", "value": 80}
];
var parseDate = d3.time.format("%Y-%m-%dT%H:%M:%S.%LZ").parse;

data.forEach(function(d) {
          d.mytime = parseDate(d.mytime);
        });
//var margin = { top: 30, right: 30, bottom: 40, left:50 },
var margin = { top: 30, right: 30, bottom: 40, left:50 },
height = 200, …
Run Code Online (Sandbox Code Playgroud)

javascript css svg d3.js

2
推荐指数
1
解决办法
1776
查看次数

如何使用Stanford NLP Parser获得"语法关系"?

我是Java开发的新手.

有人可以使用Stanfords的自然语言处理Lexical Parser-开源Java代码详细阐述如何获得"语法关系"吗?

谢谢!

java stanford-nlp

0
推荐指数
1
解决办法
2397
查看次数

React-Dropzone如何将每个文件转换为base64

我正在使用 React-dropzone 插件进行文件上传。我担心如何将每个文件转换为 base64:

例如:

这是我获取文件的函数:我在这里为每个文件创建例如拇指并附加到对象。但是如何添加像base64string这样的item here prop:它会保留每个文件的base64数据?

this.onDrop = files => {
      files.map(file =>
        Object.assign(file, {
          preview: URL.createObjectURL(file),
        })
      );
    };
Run Code Online (Sandbox Code Playgroud)

reactjs react-dropzone

0
推荐指数
1
解决办法
3069
查看次数