我正在尝试使用Selenium获取页面源代码,但是页面空白

时间:2019-06-11 02:06:27

标签: java selenium

我正在尝试使用Selenium获取页面源代码,该代码是常规SOP。它适用于Baidu.com和example.com。但是当涉及到我真正需要的URL时,我得到了一个空页面。源代码只显示空标记,如以下代码。我有什么想念的吗?

我试图添加更多的选项参数,但这似乎没有帮助

WebDriver驱动程序;

    System.setProperty("webdriver.chrome.driver", "E:\\applications\\ChromeDriver\\chromedriver_win32 (2)//chromedriver.exe");

    // 实例化一个WebDriver的对象    作用:启动谷歌浏览器
    driver = new ChromeDriver();

    driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);

    driver.get("http://rd.huangpuqu.sh.cn/website/html/shprd/shprd_tpxw/List/list_0.htm");
    String pageSource = driver.getPageSource();
    String title = driver.getTitle();
    System.out.println("==========="+title+"==============");
    System.out.println(Jsoup.parse(pageSource)); 

我希望该URL的页面经过解析,以便获得所需的信息。但我被困在这里。

2 个答案:

答案 0 :(得分:1)

使用ChromeDriver时,我可以在此网站上重现该问题。我发现,有一个JS检测到您正在使用ChromeDriver,并使用400 HTTP错误代码阻止了对该网页的请求:

enter image description here

现在,Firefox使用以下代码可以正常工作:

    FirefoxDriver driver = new FirefoxDriver();

    driver.get("http://rd.huangpuqu.sh.cn/website/html/shprd/shprd_tpxw/List/list_0.htm");
    Thread.sleep(5000);
    String pageSource = driver.getPageSource();
    String title = driver.getTitle();
    System.out.println("==========="+title+"==============");
    System.out.println(Jsoup.parse(pageSource));

    driver.quit();

我只睡了5秒钟就行了。最佳做法是等待页面中的特定元素,检查以供参考-How to wait until an element is present in Selenium?

  

firefox浏览器版本:67.0.1 geckodriver 0.24.0硒版本:   3.141.59

答案 1 :(得分:0)

首先,毫无疑问,这是一个兼容性问题。主要是由于硒-经过大量的开发,因此,存在很多有关版本兼容性的问题。 这就是我如何处理这个问题。

我选择驱动器为Firefox浏览器,版本为67.0(64 bit)。如@Adi Ohana所述,Cos Chrome将以空白结果进行响应。 我将Selenium与3.X版本一起使用。 要使用Selenium 3.X,我在pom.xml中添加以下代码:

<dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-server</artifactId>
            <version>3.141.59</version> <!-- this version context matters -->
        </dependency>

请注意,<artifactId>selenium-server</artifactId>是您需要添加到pom.xml中的内容。否则,您可能会遇到一些意外错误。

完成这些操作后,您需要一个合适的驱动程序。Firefox的驱动程序名为geckodriver。我使用的是v0.24.0版本,它是一个比.jar文件更安全的.exe文件,因此您可以通过Java代码在程序中指定它:

System.setProperty("webdriver.gecko.driver","E:\\applications\\GeckoDriver-v0.24.0-win64\\geckodriver.exe"); // 0.24.0 the 2nd param is the location of geckodriver.exe in your local computer

然后,发送对URL的请求。由于正文内容是由另一个AJAX请求加载的。您需要等待几秒钟,Selenium才能执行此操作。

Thread.sleep(5000); // this is the easyest way, may not the best though.

结论:我得到了预期的原始源代码,但是我没有解决googleDriver无法按预期工作的原因。我可能会进一步研究它。

总结: Firefox 67.0 geckodriver v0.24.0 [由Java代码分隔] Selenium 3.X [通过xml代码添加]

感谢你们,这真的很有帮助。喜欢这个社区

PS:我是使用Stackoverflow的新手。仍然在学习绳索...