我正在使用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)
返回零. …
我在做一个项目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
格式化日期.
任何建议,将不胜感激...
首先,我想说清楚我确实通过stackoverflow中发布的以下链接:
以下是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) 我是Java开发的新手.
有人可以使用Stanfords的自然语言处理Lexical Parser-开源Java代码详细阐述如何获得"语法关系"吗?
谢谢!
我正在使用 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) javascript ×3
ajax ×1
css ×1
d3.js ×1
datepicker ×1
java ×1
reactjs ×1
stanford-nlp ×1
svg ×1
telerik ×1