我目前正在学习HtmlUnit以便抓取网站.一切顺利,直到我遇到动态页面(例如,我正在使用Pinterest网站),当用户向下滚动时,动态添加元素.
我已经尝试了几种应该在真实浏览器中触发滚动的方法(我将在下面显示).在进一步讨论之前,我想提一下我已经设置了以下配置:
webclient.setJavaScriptEnabled(true);
webclient.setAjaxController(new NicelyResynchronizingAjaxController());
Run Code Online (Sandbox Code Playgroud)
让我们说我想让所有关注者都在Pinterest上.我导航到那个页面,现在从第一次只有24个,我想向下滚动,触发Ajax调用服务器并检索下一组关注者的事件.
1)简单的javascript或jQuery代码触发窗口滚动.
ScriptResult sr = followersPage.executeJavaScript("window.scrollBy(0,1000)");
// One version in jQuery
// ScriptResult sr = followersPage.executeJavaScript("$(window).scrollTop(0,1000);");
// also tried with the body, html, with animation
// ScriptResult sr = followersPage.executeJavaScript("$("html, body").animate({ scrollTop: $(document).height() }, 1000);");
webclient.waitForBackgroundJavaScript(10000);
followersPage = (HtmlPage)sr.getNewPage();
Run Code Online (Sandbox Code Playgroud)
=>当我检查到顶部的距离时,它等于0,结果页面与原始页面相同.在Eclipse中进行调试时,当我跨越执行javascript的行时,它会直接转到下一行,没有任何延迟.如果我写任何其他JavaScript,例如:
ScriptResult sr = followersPage.executeJavaScript("$(div.GridItems).html('new content')");
Run Code Online (Sandbox Code Playgroud)
您可以注意到调试器在该行上挂起了半秒钟,这意味着执行了javascript.
2)将焦点从一个跟随锚点更改为另一个(我选择了锚点,因为当您单击TAB键时它在焦点顺序中使用):
HtmlDivision gridItems = followersPage.getFirstByXPath("//div[contains(concat(' ',@class,' '),' GridItems ')]");
List<HtmlDivision> els = (List<HtmlDivision>) gridItems.getByXPath("//div[@class='item ']");
List<HtmlDivision> items = (List<HtmlDivision>) gridItems.getByXPath("//div[@class='item ']");
for (HtmlDivision item : items) {
HtmlAnchor a …Run Code Online (Sandbox Code Playgroud) 有没有办法创建动态Pinterest按钮?我正在尝试将Pinterest支持添加到主要内容是动态的站点,因此我只在页面源中有一个Pin It按钮,它固定了当前内容.
我无法找到使用预建Pin It按钮执行此操作的方法,因为它要求您提前指定硬编码的URL.
但是,还有一个Pin It bookmarklet可以实现我想要的效果 - 但这需要用户手动将其添加到书签栏.
有没有什么方法可以(a)修改Pin It按钮,或(b)以某种方式将书签集成到我的页面中,以便它可以固定任何当前页面内容?
我正在尝试获取Pinterest数据,这将是用户的公共信息(跟随者计数等),以及用户的所有引脚.
我知道v3 API现在已经启动,v2 apis已被取消.
我找到了这个链接,它给出了我想要的终点:
http://techslides.com/most-repinned-pinterest-pins-by-website/
但是我无法获得access_token.我已经要求pinirest api访问,但他们没有回复.我也无法嗅探应用数据.
我也尝试过Pinterest的签名测试工具,这个工具在他们的网站上但没有运气.它生成的链接也不起作用.它返回授权失败.
https://developers.pinterest.com/tools/signature/
我可以访问APP-ID和Client-Secret.我需要知道如何获得访问令牌/ API-KEY以使我能够完成以下工作:
https://api.pinterest.com/v3/users/jessicamalba/?access_token=APIKEY
编辑
在我被告知之前是重复的
我只想说它不是.这个问题是在一年前被问到的,并被问及V2 api.现在返回404状态.所以现在我在这里询问V3 api.
客户希望将鼠标悬停在网站上的某些图像上.我查看了Pinterest网站上的文档,只能找到如何将所有图像设置为pinit,并可选择使用CSS类关闭一些图像.但这意味着网站上95%的图像都必须有一个nopin类.
有没有办法可以将类应用于像"pinthis"这样的图像,这样只有它们才能连接到pinit按钮.我注意到你可以在Wordpress上做这样的事情,但这是一个自定义构建的网站.
提前致谢!
编辑:
这是我在头文件中添加的代码,如上面的Pinterest开发人员链接中所述:
<script type="text/javascript" src="//assets.pinterest.com/js/pinit.js" data-pin-hover="true"></script>
Run Code Online (Sandbox Code Playgroud)
这基本上将页面上的所有图像设置为具有pinit按钮,但我需要它们仅应用于具有特定类的图像
非常感谢Abhas Tandon通过使用提出这一点
$(this).trigger('click');
Run Code Online (Sandbox Code Playgroud)
代替
$(this).addClass('selected');
Run Code Online (Sandbox Code Playgroud)
它会正确选择图像.我测试了一个由21个图像组成的板,它工作得很完美!但是,当试图移动300多个引脚时,它失败并出现此错误:
"You can only move 50 Pins at a time."
Run Code Online (Sandbox Code Playgroud)
然后,我通过使用JavaScript的slice()函数来获取前50个图像,从而解决了这个问题.经过测试,现在可以正常使用.所以我的目标是,我一次只能选择并移动50个针脚,但这比用手一个一个地挑选它们要好得多!
function checkAll() {
console.log("Checkboxes count: " + checkBoxes.length);
$.each(checkBoxes, function(i, v) {
console.log("Checkbox #: " + i)// + " = " + v);
$(this).trigger('click');
});
}
var checkBoxes = $("div > div > div.bulkEditPinWrapper > button");
var checkBoxes = checkBoxes.slice(1, 51);
checkAll();
Run Code Online (Sandbox Code Playgroud)
我正在开发一个Pinterest接口(?)脚本(?)有些麻烦.我是一名程序员,大多是自学成才,我想我可能缺少一些关于AJAX理解的关键部分?这是我第二次尝试编写一个jQuery脚本来与Pinterest进行交互.第一个尝试打败无限滚动功能(AKA"加载更多"按钮),以便将所有图像显示在一个页面上,我可以从中抓取图像链接,然后使用浏览器插件下载它们以备份我的Pinterest登上我的电脑.我的代码全部工作,除了它实际上没有下载任何图像.
失望,我把它暂时放在了其他的东西上.最后,我重新访问了我的代码并进行了一些挖掘,它应该有效.我的研究表明,可能阻止我的程序做我想做的关键FLAW就是"Pinterest使用AJAX".虽然我知道"使用XML的异步JavaScript"和"XMLHttpRequest"这两个术语,但我在实施AJAX方面并不是一个专家.
使用我的最新代码,我写了一个 - 你会认为它会是 - 快速的小jQuery脚本来选择所有图像,以便我可以移动它们,删除,复制等...问题是,虽然检查所有的框工作(你必须在一个板子,然后点击"移动"),当我第二次点击"移动"按钮时,应该弹出一个模态让我们选择要移动到哪个板,我得到的只是
Oops!
Select the Pins …Run Code Online (Sandbox Code Playgroud) 我正在尝试在我的应用程序中实现Pinterest布局
我使用以下委托方法来实现它并动态设置单元格高度
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let boundingRect = CGRect(x: 0, y: 0, width: self.view.frame.size.width / 2 - 20, height: CGFloat(MAXFLOAT))
let data = articles[indexPath.row]
let rect = AVMakeRect(aspectRatio: (data.coverImage?.size)!, insideRect: boundingRect)
return CGSize(width: rect.width, height: rect.height + 120) // Added 120 for a description I will add later
}
Run Code Online (Sandbox Code Playgroud)
但是我得到了以下结果:

灰色背景是单元格的背景,你可以看到每个单元格都有自己的高度(正如预期的那样),但是还有额外的空格,我不知道如何删除.
我怎样才能解决这个问题?
我希望大家都知道pinterest样式布局及其行为:
奖金任务:
我在想如何用Meteor方式编写逻辑.让我们跳过用户界面代码,我只对业务逻辑感兴趣.
我正在考虑将ProductsDisplayed集合作为帮助器,它是空的并且在页面加载时由20个产品填充,然后当达到滚动点时,我从原始产品集合中插入20个产品等.
问题:
但也许关于ProductsDisplayed的整个想法是错误的.我很想知道你的想法!
更新!
我改变了只使用Products系列的方法.
服务器:
Meteor.publish "productsDisplayed", (number) ->
Products.find {},
limit: number
Run Code Online (Sandbox Code Playgroud)
客户:
Meteor.autosubscribe ->
Meteor.subscribe "productsDisplayed", Session.get('productsDisplayedNumber')
Run Code Online (Sandbox Code Playgroud)
当达到滚动点时,递增20个Session'productsDisplayedNumber'.但是自动订阅使得整个模板被重新渲染,而不仅仅是新元素.有任何想法吗?
我们的prod pinterest应用程序有问题.获得令牌后:
"{"access_token": "AabcYgRUKiaBI45HYM72teXO6fZaFQoEhVxkxaREoN3SR-
A4zAAAAAA", "token_type": "bearer", "scope": ["read_public",
"write_public", "read_private", "write_private", "read_relationships",
"read_write_all"]}"
Run Code Online (Sandbox Code Playgroud)
然后我们尝试
使用此令牌获取用户信息https://api.pinterest.com/v1/meAuthorization: Bearer AabcYgRUKiaBI45HYM72teXO6fZaFQoEhVxkxaREoN3SR-A4zAAAAAA
和回应
"{"status": "failure", "message": "Authorization failed.", "code": 3,
"data": null}"
Run Code Online (Sandbox Code Playgroud)
申请状态Authorization: Bearer AabcYgRUKiaBI45HYM72teXO6fZaFQoEhVxkxaREoN3SR-A4zAAAAAA 现在.它会被pinterest改变吗?我们的开发应用按预期工作.
也许这不是代码问题,但我们真的不知道该问哪里......我们已经向 Pinterest 支持提交了几个请求,但仍在等待我们的应用程序获得批准,几周后......基本上,我们没有'没有从 Pinterest 得到任何有用的答案......我们的客户向我们施加了很大压力,而且我们还需要计费......
那么,你们中有人遇到过同样的问题吗?你最后是怎么解决的?