我正在尝试使用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的页面经过解析,以便获得所需的信息。但我被困在这里。
答案 0 :(得分:1)
使用ChromeDriver时,我可以在此网站上重现该问题。我发现,有一个JS检测到您正在使用ChromeDriver,并使用400 HTTP错误代码阻止了对该网页的请求:
现在,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的新手。仍然在学习绳索...