Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.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
用java创建angularjs网站_Java_Angularjs_Selenium - Fatal编程技术网

用java创建angularjs网站

用java创建angularjs网站,java,angularjs,selenium,Java,Angularjs,Selenium,我需要刮一个网站的内容'插入'的角度。这需要用java来完成 我尝试过SeleniumWebDriver(就像我以前使用Selenium来抓取动态性较差的网页一样)。但我不知道如何处理角度部分。除了页面头部的脚本标签外,站点中只有一个地方有角度属性: <div data-ng-module="vindeenjob"><div data-ng-view=""></div> 但没有解释他为什么这么做。在他的演示页面的源代码中,我找不到任何名为“UserForm”

我需要刮一个网站的内容'插入'的角度。这需要用java来完成

我尝试过SeleniumWebDriver(就像我以前使用Selenium来抓取动态性较差的网页一样)。但我不知道如何处理角度部分。除了页面头部的脚本标签外,站点中只有一个地方有角度属性:

<div data-ng-module="vindeenjob"><div data-ng-view=""></div>
但没有解释他为什么这么做。在他的演示页面的源代码中,我找不到任何名为“UserForm”的东西。。。因此,原因仍然是个谜

然后,我尝试为Selenium设置一个时间间隔,希望能够呈现页面,并在等待期后最终获取结果,如下所示:

    WebDriver webdriver = new HtmlUnitDriver();
    webdriver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    webdriver.get("https://www.myurltoscrape.com");
但是没有用。还有一个例外,它给出了一些有趣的例外,例如无法设置属性[HTMLStyleElement]。只有getter to all的媒体。这基本上意味着javascript可能有问题。然而,HtmlUnit似乎意识到页面上有javascript,这比我之前得到的更多。我确实意识到(就像我搜索异常一样),HtmlUnit中有一个功能,可以确保您不会看到javascript异常。我把它关掉了,但还是有例外。代码如下:

webClient.getOptions().setThrowExceptionOnScriptError(false); 
我会发布更多的代码,但基本上没有任何东西会刮去动态内容,我很确定这不是错误的代码,它只是还不是正确的解决方案


我能得到一些帮助吗

最后,我遵循了Madusudanan的优秀建议,研究了PhantomJS/Selenium组合。事实上有一个解决办法!它被称为PhantomJSDriver

您可以找到maven依赖项。这里有更多的信息

Maven中的设置-我添加了以下内容:

<dependency>
        <groupId>net.sourceforge.htmlunit</groupId>
        <artifactId>htmlunit</artifactId>
        <version>2.41.0</version>
    </dependency>
    <dependency>
        <groupId>com.github.detro</groupId>
        <artifactId>phantomjsdriver</artifactId>
        <version>1.2.0</version>
    </dependency>

net.sourceforge.htmlunit
htmlunit
2.41.0
com.github.detro
幻影驱动程序
1.2.0
它还使用Selenium 2.45版运行,这是迄今为止的最新版本。我之所以提到这一点,是因为我读过一些文章,其中有人说幻影驱动程序与Selenium的每个版本都不兼容,但我想他们同时也解决了这个问题

如果您已经在使用Selenium/Phantomdriver组合,并且在某个站点上出现“严格的javascript错误”,请更新您的Selenium版本。那会解决的

下面是一些示例代码:

public void testPhantomDriver() throws Exception {
    DesiredCapabilities options = new DesiredCapabilities();
    // the website i am scraping uses ssl, but I dont know what version
    options.setCapability(PhantomJSDriverService.PHANTOMJS_CLI_ARGS, new String[] {
          "--ssl-protocol=any"
      });

    PhantomJSDriver driver = new PhantomJSDriver(options);

    driver.get("https://www.mywebsite");

    List<WebElement> elements = driver.findElementsByClassName("media-title");

    for(WebElement element : elements ){
        System.out.println(element.getText());
    }

    driver.quit();
}
public void testPhantomDriver()引发异常{
DesiredCapabilities选项=新DesiredCapabilities();
//我正在抓取的网站使用ssl,但我不知道是什么版本
options.setCapability(PhantomJSDriverService.PHANTOMJS_CLI_参数,新字符串[]){
“--ssl协议=任何”
});
PhantomJSDriver=新的PhantomJSDriver(选项);
驱动程序。获取(“https://www.mywebsite");
列表元素=driver.findElementsByClassName(“媒体标题”);
for(WebElement:elements){
System.out.println(element.getText());
}
driver.quit();
}

这是一个完美的解决方案,可以使用JSoup和WebDriver与java一起废弃任何网页

ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.addArguments("--headless");
WebDriver driver = new romeDriver(chromeOptions);
driver.get(bean.getDomainQuery().trim());
Document doc = Jsoup.parse(driver.getPageSource());

然后使用JSoup选择器读取任何标记信息

Selenium并不是专门设计用来这样做的,尽管它可以这样做。如果您的要求是纯粹的刮擦,我建议您使用或类似的高级方法。@Madusdanan感谢您的评论。我已经尝试了Jsoup,然后在stackoverflow上发现了这个:。这是很久以前的事了,所以jsoup可能已经更新了,但实际上找不到任何关于jsoup和angular的信息。。。不过我会调查一下那个疯子。谢谢请注意,Nutch实际上非常先进,不仅仅是一个网络爬虫。还要看看哪个实际上是一个javascript库,但可以由selenium调用。在哪里设置到phantomjs.exe的路径?据我所知,您不必设置到phantomjs.exe的路径。唯一需要做的事情就是在系统上安装phantomjs,在这个系统上运行这个代码(WindowsBox)很酷,tnx!我会调查的!
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.addArguments("--headless");
WebDriver driver = new romeDriver(chromeOptions);
driver.get(bean.getDomainQuery().trim());
Document doc = Jsoup.parse(driver.getPageSource());