Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net AngleSharp-如何浏览链接触发表单提交的网站_Asp.net_Web Scraping_Anglesharp - Fatal编程技术网

Asp.net AngleSharp-如何浏览链接触发表单提交的网站

Asp.net AngleSharp-如何浏览链接触发表单提交的网站,asp.net,web-scraping,anglesharp,Asp.net,Web Scraping,Anglesharp,我正在尝试从该网站的多个搜索结果页面中刮取“阅读更多”链接: 并没有指向搜索结果任何特定页面的规范链接。当您导航到第2页时,URL将保持不变 在检查底层HTML和JavaScript之后,我看到分页链接在单击时触发JavaScript函数 下面是调用的函数: <script type="text/javascript"> //<![CDATA[ var theForm = document.forms['form1']; if (!theForm) { theFor

我正在尝试从该网站的多个搜索结果页面中刮取“阅读更多”链接:

并没有指向搜索结果任何特定页面的规范链接。当您导航到第2页时,URL将保持不变

在检查底层HTML和JavaScript之后,我看到分页链接在单击时触发JavaScript函数


下面是调用的函数:

<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进行此操作


到目前为止,我的答案如下:

这里有两个可能的答案:

  • 您需要JavaScript(例如,AngleSharp.JavaScript,最新版本的AngleSharp尚未提供),并且需要通过“单击”触发JavaScript的链接来触发表单提交
  • (如前所述,这一条不会起作用——至少目前不会)

  • (我猜这就是你想要的——从你的部分问题判断)你需要在C#中实现特定的JS。由于AngleSharp为您提供了动态DOM,您可以这样做
  • 特定代码在C#中如下所示(假设您也调用
    文档
    实例
    文档
    ):

    希望有帮助

    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();
    }