我正在尝试从本网站的多个搜索结果页面上刮擦"更多"链接:https://www.cgg.com/en/31
没有指向搜索结果任何特定页面的规范链接。当您导航到第2页时,URL保留https://www.cgg.com/en/31。
检查下面的HTML和JavaScript后,我看到分页链接在单击时触发JavaScript函数。
<a href="javascript:__doPostBack('ctl00$ContentPlaceHolder1$ctl00$Layout-7-main-partial2$TmsPager1$ctl02$ctl00','')">NEXT</a>
这是被调用的函数:
<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['form1'];
if (!theForm) {
theForm = document.form1;
}
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
//]]>
</script>
因此,通过单击"下一步",浏览器将重定向到同一URL,但具有不同的内容。
单击"下一个"按钮后,我想从下一页刮擦"更多"链接。自从单击"下一个"按钮实际上提交表单并重新加载页面以来,我将如何使用Anglesharp进行操作?
这是我到目前为止所拥有的:https://dotnetfiddle.net/3f6xzc
这里有两个可能的答案:
- 您需要JavaScript(例如,AngleSharp.JavaScript,最新版本的AngleSharp尚不可用),并且需要通过"单击"触发JavaScript的链接来触发表单。
(这是不起作用的 - 至少 - 如前所述)
- (我想这是您所追求的 - 从问题的某些部分来看),您需要在C#中实现该特定的JS。正如Anglesharp为您提供动态的DOM,您可以做到这一点。
特定的代码如下如下(假设您还调用document
实例document
):
Task SubmitForm(IDocument document, string eventTarget, string eventArgument)
{
var theForm = document.Forms["form1"];
if (!theForm) {
throw new InvalidOperationException("The form cannot be found!");
}
void SetElement(string name, string value)
{
var element = theForm.Elements[name] as IHtmlInputElement;
if (element != null)
{
element.value = value;
}
}
SetValue("__EVENTTARGET", eventTarget);
SetValue("__EVENTARGUMENT", eventArgument);
return theForm.SubmitAsync();
}
希望有帮助!