当前位置: 首页 > 知识库问答 >
问题:

我试图使用Selenium获取页面源代码,但我得到了空页面

丌官翰采
2023-03-14

我正在尝试使用Selenium获取页面源代码,代码是通用SOP。这对百度来说是可行的。com和示例。通用域名格式。但说到我真正需要的URL,我得到了一个空页面。源代码只显示空标记,如下代码所示。我遗漏了什么吗?

我试图增加更多的选项,但似乎没有帮助

网络驱动程序;

    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个答案

越扬
2023-03-14

首先,这肯定是一个可兼容性问题。这主要是因为硒——它已经经历了大量的开发,因此,关于版本兼容性的大量问题。以下是我最终处理这个问题的方式。

我选择了Firefox浏览器驱动,版本是67.0(64位)。Cos Chrome将以@Adi Ohana提到的空白结果进行响应。我在3的版本中使用了Selenium。X.使用硒3。十、 我在pom中添加了以下代码。xml:

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

注意,这是<代码>

完成这些后,你需要一个合适的司机。firefox的驱动程序名为geckodriver。我用v0。24.0版本,这是一个。exe文件比。jar,以便在编程中通过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 geckoDrive v0.24.0[由java代码分割]Selenium 3. X[由xml-code添加]

谢谢你们,真的很有帮助。就像这个社区

附言:我不太会使用stackoverflow。还在学习诀窍。。。

万俟玉书
2023-03-14

当我使用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秒钟,效果很好。最佳实践是等待页面中的特定元素,请检查此项以供参考-如何等待元素出现在Selenium中?

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

 类似资料:
  • <?php $http = HttpRequest::newSession(); $response = $http->get('http://www.baidu.com/'); $content = $response->body(); // 网页源码

  • 在C:\用户\戴尔\桌面\项目\my-app中创建新的React应用。 安装包。这可能需要几分钟。使用cra模板安装反应、反应-多姆和反应-脚本... NPM ERR!最大调用堆栈大小超过npm ERR!超出最大调用堆栈大小 NPM ERR!此运行的完整日志可以在npm ERR中找到!C:\用户\戴尔\AppData\漫游\npmcache_logs\2020-09-05T07_43_27_276

  • 这里是我的错误: java.lang.NullPointerException位于com.insuranceplanes.testcases.loginpageTest.TearDown(loginpageTest.java:48)位于java.base/jdk.internal.reflect.nativeMethodAccessorImpl.Invoke0(原生方法)位于java.base/j

  • 问题内容: 我们如何获得使用Selenium WebDriver加载页面的准确时间? 我们使用Thread.sleep 我们隐式使用 我们使用WebDriverWait 但是我们如何获得使用Selenium WebDriver加载页面的准确时间呢? 问题答案: 如果您尝试找出使用Selenium WebDriver(又名Selenium 2)完全加载页面需要多少时间。 通常,仅在页面完全加载后,W

  • 我试图在数据库中的CLOB类型列中插入一个很长的字符串,它基本上是一个base64编码的图像字符串,但我得到了异常java.sql.sqlsyntaxerroreXception。做这件事的正确方法是什么? 我尝试了setClob()中的Clob对象和setClob()中的reader对象,但给出了相同的异常“java.sql.sqlsyntaxerrorexception”,并且我将OJDBC1