当前位置: 首页 > 面试题库 >

在python中使用scrapy执行Javascript提交表单功能

堵宏毅
2023-03-14
问题内容

我正在使用scrapy框架来抓取网站,并且无法单击javascript链接来打开另一个页面。

我可以将页面上的代码标识为:

<a class="Page" alt="Click to view job description" title="Click to view job description" href="javascript:sysSubmitForm('frmSR1');">Accountant&nbsp;</a>

谁能建议我如何在Scaroy中执行该javascript并通过我获得另一页,我可以从该页中获取数据。

提前致谢


问题答案:

检出以下有关如何将selenium一起使用的摘要。爬网速度会变慢,因为你不仅要下载html,还可以完全访问DOM。

注意:由于先前提供的链接不再起作用,因此我已复制粘贴此代码段。

# Snippet imported from snippets.scrapy.org (which no longer works)

from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.selector import HtmlXPathSelector
from scrapy.http import Request

from selenium import selenium

class SeleniumSpider(CrawlSpider):
    name = "SeleniumSpider"
    start_urls = ["http://www.domain.com"]

    rules = (
        Rule(SgmlLinkExtractor(allow=('\.html', )),
        callback='parse_page',follow=True),
    )

    def __init__(self):
        CrawlSpider.__init__(self)
        self.verificationErrors = []
        self.selenium = selenium("localhost", 4444, "*chrome", "http://www.domain.com")
        self.selenium.start()

    def __del__(self):
        self.selenium.stop()
        print self.verificationErrors
        CrawlSpider.__del__(self)

    def parse_page(self, response):
        item = Item()

        hxs = HtmlXPathSelector(response)
        #Do some XPath selection with Scrapy
        hxs.select('//div').extract()

        sel = self.selenium
        sel.open(response.url)

        #Wait for javscript to load in Selenium
        time.sleep(2.5)

        #Do some crawling of javascript created content with Selenium
        sel.get_text("//div")
        yield item


 类似资料:
  • 问题内容: 我想在提交表单时运行JavaScript函数。问题在于,提交表单后,将重新加载页面,并将表单值作为GET参数附加到URL。我希望它保留在当前页面上,仅运行JavaScript函数。 我想知道什么最佳实践(或您做什么),以避免重新发送页面和发送参数。 问题答案: 提交表单后,使用该事件执行JavaScript代码。然后,您可以返回false或调用传递的事件的方法来禁用表单提交。 例如:

  • 问题内容: 我有一个ID为ID的表单,该表单具有以下div,其中包含一个Submit按钮: 单击后,将调用该函数。该函数将上述div的innerHTML更改为“ processing …”(因此,提交按钮现在消失了)。 上面的代码有效,但是现在的问题是我无法提交表单!我试着把它放在函数中: 但这是行不通的。 我该如何提交表格? 问题答案: 将表单的属性设置为,代码即可正常工作。

  • 问题内容: 我已经看过很多次这样的问题,但是没有一个有用的 我试图将数据提交到网络上的表单,我尝试了请求,并且urllib都没有工作 例如,以下代码应在SO上搜索[python]标记: 但是当我运行它时,我会得到主页的html源 这是使用请求的示例: 同样的结果!我不明白为什么这些方法无法奏效,但我已经在各种站点上尝试了这些方法,但均未成功,因此,如果有人成功完成此操作,请告诉我如何做! 非常感谢

  • 问题内容: 关于如何使用javascript提交表单似乎有很多信息,但是我正在寻找一种解决方案,以捕获表单提交后在javascript中进行拦截的方法。 的HTML 当用户按下“提交”按钮时,我 不 希望提交表单,而是希望调用JavaScript函数。 一个快速的技巧是在按钮上添加onclick函数,但是我不喜欢这种解决方案…有很多方法可以提交表单…例如,在输入时按回车键,这不能解释。 泰 问题答

  • 问题内容: 我正在尝试在wordpress中获取ajax请求的结果,但是在javascript的警报框中却获得了“ 0”的结果,因此该表单如下所示: javascript看起来像这样: 和PHP: 有谁知道上面的代码是否正确,我也尝试过$ _REQUEST [‘name’],它不起作用。 非常感谢 问题答案: 尝试这样的操作,您没有在PHP 函数中添加期望的参数,因此必须将其添加到jQuery a

  • 问题内容: 我希望HTML表单在提交后不执行任何操作。 这是不好的,因为它会导致页面重新加载。 基本上,我希望每当按下按钮或有人在键入数据后单击“输入”时都调用ajax函数。是的,我可以删除表单标签并添加,只需从按钮的onclick事件中调用该函数即可,但是我也希望“命中进入”功能而不会引起任何麻烦。 问题答案: 通过在通过“提交”按钮调用的javascript中使用,可以停止提交表单。 基本上,