我正在尝试抓取一个需要通过__doPostBack函数点击页面按钮的网页。我已经在chrome控制台中尝试了以下代码。
javascript:__doPostBack('ctl00$siteContent$widgetLayout$rptWidgets$ctl03$widgetContainer$ctl00$pgrTable$pagingLinksRepeater$ctl02$pageSelector','')
这样就行了,我可以转到下一页了。然而,在将此命令传递给木偶师时,我遇到了一些困难。我尝试了以下几种方法,但都没有成功。
await page.evaluate(() => { javascript:__doPostBack('ctl00$siteContent$widgetLayout$rptWidgets$ctl03$widgetContainer$ctl00$pgrTable$pagingLinksRepeater$ctl02$pageSelector','');})
我还尝试修改aspnet表单,将__EVENTTARGET值重置为
'ctl00$siteContent$widgetLayout$rptWidgets$ctl03$widgetContainer$ctl00$pgrTable$pagingLinksRepeater$ctl02$pageSelector'
但这似乎还不够。感谢您的任何建议。
发布于 2019-04-20 03:21:19
问题是ASP.NET注册了两个__doPostBack
函数。
页面中的一个:
//<![CDATA[
var theForm = document.forms['aspnetForm'];
if (!theForm) {
theForm = document.aspnetForm;
}
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
//]]>
和源脚本中的另一个
Sys.Extended.UI.ControlBase.__doPostBack = function(n, t) {
if (!Sys.WebForms.PageRequestManager.getInstance().get_isInAsyncPostBack())
for (var i = 0; i < Sys.Extended.UI.ControlBase.onsubmitCollection.length; i++)
Sys.Extended.UI.ControlBase.onsubmitCollection[i]();
Function.createDelegate(window, Sys.Extended.UI.ControlBase.__doPostBackSaved)(n, t)
};
当他们使用ControlBase
扩展window
时,您将获得来自资源文件的__doPostBack
函数,而不是来自页面的函数。
您可以改为单击该按钮。
await page.click('#ctl00_siteContent_widgetLayout_rptWidgets_ctl03_widgetContainer_ctl00_pgrTable_pagingLinksRepeater_ctl01_pageSelector');
发布于 2019-04-17 04:04:07
您可以在页面中定义函数之前调用该函数。尝试等待它被定义:
await page.waitForFunction(() => typeof __doPostBack !== 'undefined');
await page.evaluate(() => {
__doPostBack('ctl00$siteContent$widgetLayout$rptWidgets$ctl03$widgetContainer$ctl00$pgrTable$pagingLinksRepeater$ctl02$pageSelector','');
});
发布于 2021-03-31 00:51:06
在我尝试用https://members.acacamps.org/rentals网站做同样的事情后,我发现了这篇文章
我试图通过底部的导航器在“下一步”按钮上使用page.click
,但是我得到了一个Node not found or not an HTML element
错误。
不知道为什么木偶不把它捡起来,但想像一下这和doPostBack
有关。
解决方案是使用document.querySelector:
page.evaluate(()=>document.querySelector('linkid').click())
成功了
希望这篇文章也能帮助那些有这个问题的人。我认为我们需要在这里使用querySelector
,因为这种情况没有像OP的问题那样有两个独立的doPostBack调用?
https://stackoverflow.com/questions/55711331
复制相似问题