Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.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
Python 提交使用Scrapy动态呈现的表单?_Python_Selenium_Selenium Webdriver_Scrapy_Scrapy Spider - Fatal编程技术网

Python 提交使用Scrapy动态呈现的表单?

Python 提交使用Scrapy动态呈现的表单?,python,selenium,selenium-webdriver,scrapy,scrapy-spider,Python,Selenium,Selenium Webdriver,Scrapy,Scrapy Spider,我正在尝试使用Scrapy提交一个动态生成的用户登录表单,然后解析页面上与成功登录对应的HTML 我想知道我如何用Scrapy或者Scrapy和Selenium的组合来做到这一点。Selenium可以在DOM上找到元素,但我想知道是否可以在获得完整HTML后将控制权交还给Scrapy,以便它执行表单提交并保存必要的Cookie、会话数据等,以便刮取页面 基本上,我认为Selenium是必要的唯一原因是因为我需要在Scrapy查找元素之前从Javascript呈现页面。但是,有没有其他办法 谢谢大

我正在尝试使用Scrapy提交一个动态生成的用户登录表单,然后解析页面上与成功登录对应的HTML

我想知道我如何用Scrapy或者Scrapy和Selenium的组合来做到这一点。Selenium可以在DOM上找到元素,但我想知道是否可以在获得完整HTML后将控制权交还给Scrapy,以便它执行表单提交并保存必要的Cookie、会话数据等,以便刮取页面

基本上,我认为Selenium是必要的唯一原因是因为我需要在Scrapy查找元素之前从Javascript呈现页面。但是,有没有其他办法

谢谢大家!

编辑:这个问题类似于,但不幸的是,被接受的答案涉及的是请求库,而不是Selenium或Scrapy。正如alecxe所指出的,虽然这种情况在某些情况下可能会发生,但如果页面的某些部分[如表单]通过API调用加载,并借助浏览器中执行的javascript代码插入页面,则可能需要使用Selenium。Scrapy实际上并不适合coursera站点,因为它非常异步。部分页面通过API调用加载,并在浏览器中执行javascript代码的帮助下插入到页面中。Scrapy不是浏览器,无法处理它

这就引出了一个问题——为什么不使用公共可用的

除了文档中记录的内容外,您还可以在浏览器开发人员工具中看到其他端点—您需要经过身份验证才能使用它们。例如,如果您已登录,您可以看到您所修课程的列表:

有对memberships.v1端点的调用

举个例子,让我们启动selenium,登录并用抓取cookies。然后,让我们向memberships.v1 endpoint发出请求,以获取提供selenium提供的Cookie的存档课程列表:

对我来说,它打印:

Algorithms, Part I
Computing for Data Analysis
Pattern-Oriented Software Architectures for Concurrent and Networked Software
Computer Networks
这证明了我们可以为Scrapy提供来自selenium的Cookie,并成功地从仅用于登录用户的页面中提取数据

此外,请确保您没有违反来自的规则,特别是:

此外,作为访问网站的条件,您同意不 ... c使用任何大容量、自动化或电子方式访问 网站包括但不限于机器人、蜘蛛、脚本或 网页抓取工具

Scrapy实际上并不适合coursera站点,因为它非常异步。部分页面通过API调用加载,并在浏览器中执行javascript代码的帮助下插入到页面中。Scrapy不是浏览器,无法处理它

这就引出了一个问题——为什么不使用公共可用的

除了文档中记录的内容外,您还可以在浏览器开发人员工具中看到其他端点—您需要经过身份验证才能使用它们。例如,如果您已登录,您可以看到您所修课程的列表:

有对memberships.v1端点的调用

举个例子,让我们启动selenium,登录并用抓取cookies。然后,让我们向memberships.v1 endpoint发出请求,以获取提供selenium提供的Cookie的存档课程列表:

对我来说,它打印:

Algorithms, Part I
Computing for Data Analysis
Pattern-Oriented Software Architectures for Concurrent and Networked Software
Computer Networks
这证明了我们可以为Scrapy提供来自selenium的Cookie,并成功地从仅用于登录用户的页面中提取数据

此外,请确保您没有违反来自的规则,特别是:

此外,作为访问网站的条件,您同意不 ... c使用任何大容量、自动化或电子方式访问 网站包括但不限于机器人、蜘蛛、脚本或 网页抓取工具


是的,但是您可以使用scrapy.http.Request应用接受答案中提供的解决方案。这个想法是,你,最有可能,可以避免使用硒。嘿,alecxe,谢谢你的评论!刚刚编辑了这个问题,解释了为什么另一个问题的答案不适合我。不过,我真的希望避免使用Selenium,因为它似乎会使整个过程大大降低速度,并且在内存方面更加昂贵。在请求的情况下,还有requests.Session,它将处理cookies并维护web抓取会话。但我想说的是——你可以用请求做什么,你也可以用Scrapy.http.Request做Scrapy。无论如何,如果可能的话,请分享链接或关于你具体问题的更多细节——让我们选择实用的方法。谢谢,谢谢,阿莱克斯!!表格是Coursera的,链接是。本文概述了登录Coursera所增加的困难,虽然它是Ruby.Yup版本的,但是您可以应用t
他用scrapy.http.Request接受了答案。这个想法是,你,最有可能,可以避免使用硒。嘿,alecxe,谢谢你的评论!刚刚编辑了这个问题,解释了为什么另一个问题的答案不适合我。不过,我真的希望避免使用Selenium,因为它似乎会使整个过程大大降低速度,并且在内存方面更加昂贵。在请求的情况下,还有requests.Session,它将处理cookies并维护web抓取会话。但我想说的是——你可以用请求做什么,你也可以用Scrapy.http.Request做Scrapy。无论如何,如果可能的话,请分享链接或关于你具体问题的更多细节——让我们选择实用的方法。谢谢,谢谢,阿莱克斯!!表格是Coursera的,链接是。虽然Coursera是用Ruby编写的,但本文概述了登录Coursera的额外困难。非常感谢-这是一个令人难以置信的答案。非常感谢-这是一个令人难以置信的答案。